From f48c38125956578611832f6017b0cb2ffdbe3725 Mon Sep 17 00:00:00 2001
From: 吴健 <14790700720@163.com>
Date: 星期二, 15 四月 2025 09:00:32 +0800
Subject: [PATCH] add

---
 billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java                   |  523 +++++------
 billion-ui/src/assets/logo/logo.png                                                          |    0 
 billion-ui/src/api/main/da/stationCollection.js                                              |   25 
 billion-ui/src/assets/logo/logo2.png                                                         |    0 
 billion-admin/src/main/resources/application.yml                                             |   17 
 billion-generator/src/main/resources/mapper/generator/GenTableMapper.xml                     |  285 +++--
 billion-ui/src/router/index.js                                                               |   24 
 billion-ui/src/views/index.vue                                                               | 1138 ++---------------------
 billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscriptionTemp.java               |  332 +++---
 billion-ui/src/views/login.vue                                                               |    4 
 billion-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml                          |    2 
 billion-quartz/src/main/java/com/billion/quartz/util/AbstractQuartzJob.java                  |    2 
 billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java               |    3 
 billion-quartz/src/main/java/com/billion/quartz/task/RyTask.java                             |    8 
 billion-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml                             |    4 
 billion-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml               |  132 +-
 billion-main/pom.xml                                                                         |   23 
 billion-main/src/main/java/com/billion/main/da/controller/DaStationCollectionController.java |  142 ++
 billion-quartz/pom.xml                                                                       |    4 
 billion-admin/src/main/resources/application-druid.yml                                       |    4 
 billion-main/src/main/java/com/billion/main/plc/CustomRunner.java                            |  122 +-
 21 files changed, 1,044 insertions(+), 1,750 deletions(-)

diff --git a/billion-admin/src/main/resources/application-druid.yml b/billion-admin/src/main/resources/application-druid.yml
index 4ccf385..237395c 100644
--- a/billion-admin/src/main/resources/application-druid.yml
+++ b/billion-admin/src/main/resources/application-druid.yml
@@ -6,9 +6,9 @@
         druid:
             # 涓诲簱鏁版嵁婧�
             master:
-                url: jdbc:sqlserver://127.0.0.1:1433;DataBaseName=billion-db-bq
+                url: jdbc:sqlserver://127.0.0.1:1433;DataBaseName=billion-db-063
                 username: sa
-                password: admin@123
+                password: 123456
 #    datasource:
 #        type: com.alibaba.druid.pool.DruidDataSource
 #        driverClassName: com.mysql.cj.jdbc.Driver
diff --git a/billion-admin/src/main/resources/application.yml b/billion-admin/src/main/resources/application.yml
index d88b10f..4215a72 100644
--- a/billion-admin/src/main/resources/application.yml
+++ b/billion-admin/src/main/resources/application.yml
@@ -171,9 +171,14 @@
   # 鍖归厤閾炬帴
   urlPatterns: /system/*,/monitor/*,/tool/*
 
-kangaroohy:
-  milo:
-      config:
-        default:
-          endpoint: opc.tcp://127.0.0.1:49320
-          security-policy: none
+tcp:
+  server:
+    ip: 127.0.0.1
+    port: 1000
+
+#kangaroohy:
+#  milo:
+#      config:
+#        default:
+#          endpoint: opc.tcp://127.0.0.1:49320
+#          security-policy: none
diff --git a/billion-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/billion-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
index f60cb7b..63a2902 100644
--- a/billion-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
+++ b/billion-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.billion.generator.mapper.GenTableColumnMapper">
 
     <resultMap type="GenTableColumn" id="GenTableColumnResult">
@@ -29,7 +29,7 @@
         <result property="updateTime"     column="update_time"    />
     </resultMap>
 
-	<sql id="selectGenTableColumnVo">
+    <sql id="selectGenTableColumnVo">
         select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column
     </sql>
 
@@ -40,72 +40,98 @@
     </select>
 
     <select id="selectDbTableColumnsByName" parameterType="String" resultMap="GenTableColumnResult">
-		select column_name, (case when (is_nullable = 'no' <![CDATA[ && ]]> column_key != 'PRI') then '1' else '0' end) as is_required, (case when column_key = 'PRI' then '1' else '0' end) as is_pk, ordinal_position as sort, column_comment, (case when extra = 'auto_increment' then '1' else '0' end) as is_increment, column_type
-		from information_schema.columns where table_schema = (select database()) and table_name = (#{tableName})
-		order by ordinal_position
-	</select>
+        SELECT a.name                                                                       AS column_name,
+               (CASE WHEN a.isnullable = 1 THEN 0 ELSE 1 END)                               AS is_required,
+               (CASE WHEN (
+                              SELECT COUNT(*) FROM sysobjects
+                              WHERE (name IN (
+                                  SELECT name FROM sysindexes
+                                  WHERE (id = a.id)
+                                    AND (indid IN (
+                                      SELECT indid FROM sysindexkeys
+                                      WHERE (id = a.id)
+                                        AND (colid IN (SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))
+                                  ))))
+                                AND (xtype = 'PK')
+                          ) > 0 THEN 1
+                     ELSE 0 END)                                                             AS is_pk,
+               a.colorder                                                                   AS sort,
+               isnull(g.[value], ' ')                                                       AS column_comment,
+               (CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN 1 ELSE 0 END) AS is_increment,
+               b.name                                                                       AS column_type
+        FROM syscolumns as a
+                 LEFT JOIN systypes b ON a.xtype = b.xusertype
+                 INNER JOIN sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.name <![CDATA[<>]]> 'dtproperties'
+                 LEFT JOIN syscomments e ON a.cdefault = e.id
+                 LEFT JOIN sys.extended_properties g ON a.id = g.major_id AND a.colid = g.minor_id
+                 LEFT JOIN sys.extended_properties f ON d.id = f.class AND f.minor_id = 0
+                 LEFT JOIN sys.objects h ON a.id = h.object_id
+                 LEFT JOIN sys.schemas i ON h.schema_id = i.schema_id
+        WHERE d.name = #{tableName}
+        ORDER BY a.colorder
+    </select>
 
     <insert id="insertGenTableColumn" parameterType="GenTableColumn" useGeneratedKeys="true" keyProperty="columnId">
         insert into gen_table_column (
-			<if test="tableId != null and tableId != ''">table_id,</if>
-			<if test="columnName != null and columnName != ''">column_name,</if>
-			<if test="columnComment != null and columnComment != ''">column_comment,</if>
-			<if test="columnType != null and columnType != ''">column_type,</if>
-			<if test="javaType != null and javaType != ''">java_type,</if>
-			<if test="javaField != null  and javaField != ''">java_field,</if>
-			<if test="isPk != null and isPk != ''">is_pk,</if>
-			<if test="isIncrement != null and isIncrement != ''">is_increment,</if>
-			<if test="isRequired != null and isRequired != ''">is_required,</if>
-			<if test="isInsert != null and isInsert != ''">is_insert,</if>
-			<if test="isEdit != null and isEdit != ''">is_edit,</if>
-			<if test="isList != null and isList != ''">is_list,</if>
-			<if test="isQuery != null and isQuery != ''">is_query,</if>
-			<if test="queryType != null and queryType != ''">query_type,</if>
-			<if test="htmlType != null and htmlType != ''">html_type,</if>
-			<if test="dictType != null and dictType != ''">dict_type,</if>
-			<if test="sort != null">sort,</if>
-			<if test="createBy != null and createBy != ''">create_by,</if>
-			create_time
-         )values(
-			<if test="tableId != null and tableId != ''">#{tableId},</if>
-			<if test="columnName != null and columnName != ''">#{columnName},</if>
-			<if test="columnComment != null and columnComment != ''">#{columnComment},</if>
-			<if test="columnType != null and columnType != ''">#{columnType},</if>
-			<if test="javaType != null and javaType != ''">#{javaType},</if>
-			<if test="javaField != null and javaField != ''">#{javaField},</if>
-			<if test="isPk != null and isPk != ''">#{isPk},</if>
-			<if test="isIncrement != null and isIncrement != ''">#{isIncrement},</if>
-			<if test="isRequired != null and isRequired != ''">#{isRequired},</if>
-			<if test="isInsert != null and isInsert != ''">#{isInsert},</if>
-			<if test="isEdit != null and isEdit != ''">#{isEdit},</if>
-			<if test="isList != null and isList != ''">#{isList},</if>
-			<if test="isQuery != null and isQuery != ''">#{isQuery},</if>
-			<if test="queryType != null and queryType != ''">#{queryType},</if>
-			<if test="htmlType != null and htmlType != ''">#{htmlType},</if>
-			<if test="dictType != null and dictType != ''">#{dictType},</if>
-			<if test="sort != null">#{sort},</if>
-			<if test="createBy != null and createBy != ''">#{createBy},</if>
-			sysdate()
-         )
+        <if test="tableId != null and tableId != ''">table_id,</if>
+        <if test="columnName != null and columnName != ''">column_name,</if>
+        <if test="columnComment != null and columnComment != ''">column_comment,</if>
+        <if test="columnType != null and columnType != ''">column_type,</if>
+        <if test="javaType != null and javaType != ''">java_type,</if>
+        <if test="javaField != null  and javaField != ''">java_field,</if>
+        <if test="isPk != null and isPk != ''">is_pk,</if>
+        <if test="isIncrement != null and isIncrement != ''">is_increment,</if>
+        <if test="isRequired != null and isRequired != ''">is_required,</if>
+        <if test="isInsert != null and isInsert != ''">is_insert,</if>
+        <if test="isEdit != null and isEdit != ''">is_edit,</if>
+        <if test="isList != null and isList != ''">is_list,</if>
+        <if test="isQuery != null and isQuery != ''">is_query,</if>
+        <if test="queryType != null and queryType != ''">query_type,</if>
+        <if test="htmlType != null and htmlType != ''">html_type,</if>
+        <if test="dictType != null and dictType != ''">dict_type,</if>
+        <if test="sort != null">sort,</if>
+        <if test="createBy != null and createBy != ''">create_by,</if>
+        create_time
+        )values(
+        <if test="tableId != null and tableId != ''">#{tableId},</if>
+        <if test="columnName != null and columnName != ''">#{columnName},</if>
+        <if test="columnComment != null and columnComment != ''">#{columnComment},</if>
+        <if test="columnType != null and columnType != ''">#{columnType},</if>
+        <if test="javaType != null and javaType != ''">#{javaType},</if>
+        <if test="javaField != null and javaField != ''">#{javaField},</if>
+        <if test="isPk != null and isPk != ''">#{isPk},</if>
+        <if test="isIncrement != null and isIncrement != ''">#{isIncrement},</if>
+        <if test="isRequired != null and isRequired != ''">#{isRequired},</if>
+        <if test="isInsert != null and isInsert != ''">#{isInsert},</if>
+        <if test="isEdit != null and isEdit != ''">#{isEdit},</if>
+        <if test="isList != null and isList != ''">#{isList},</if>
+        <if test="isQuery != null and isQuery != ''">#{isQuery},</if>
+        <if test="queryType != null and queryType != ''">#{queryType},</if>
+        <if test="htmlType != null and htmlType != ''">#{htmlType},</if>
+        <if test="dictType != null and dictType != ''">#{dictType},</if>
+        <if test="sort != null">#{sort},</if>
+        <if test="createBy != null and createBy != ''">#{createBy},</if>
+        getdate()
+        )
     </insert>
 
     <update id="updateGenTableColumn" parameterType="GenTableColumn">
         update gen_table_column
         <set>
+            is_insert = #{isInsert},
+            is_edit = #{isEdit},
+            is_list = #{isList},
+            is_query = #{isQuery},
+            is_required = #{isRequired},
             <if test="columnComment != null">column_comment = #{columnComment},</if>
             <if test="javaType != null">java_type = #{javaType},</if>
             <if test="javaField != null">java_field = #{javaField},</if>
-            <if test="isInsert != null">is_insert = #{isInsert},</if>
-            <if test="isEdit != null">is_edit = #{isEdit},</if>
-            <if test="isList != null">is_list = #{isList},</if>
-            <if test="isQuery != null">is_query = #{isQuery},</if>
-            <if test="isRequired != null">is_required = #{isRequired},</if>
             <if test="queryType != null">query_type = #{queryType},</if>
             <if test="htmlType != null">html_type = #{htmlType},</if>
             <if test="dictType != null">dict_type = #{dictType},</if>
             <if test="sort != null">sort = #{sort},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
-            update_time = sysdate()
+            update_time = getdate()
         </set>
         where column_id = #{columnId}
     </update>
diff --git a/billion-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/billion-generator/src/main/resources/mapper/generator/GenTableMapper.xml
index 7ea43b9..3ed6d56 100644
--- a/billion-generator/src/main/resources/mapper/generator/GenTableMapper.xml
+++ b/billion-generator/src/main/resources/mapper/generator/GenTableMapper.xml
@@ -1,18 +1,17 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+		PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+		"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.billion.generator.mapper.GenTableMapper">
 
 	<resultMap type="GenTable" id="GenTableResult">
-	    <id     property="tableId"        column="table_id"          />
+		<id     property="tableId"        column="table_id"          />
 		<result property="tableName"      column="table_name"        />
 		<result property="tableComment"   column="table_comment"     />
 		<result property="subTableName"   column="sub_table_name"    />
 		<result property="subTableFkName" column="sub_table_fk_name" />
 		<result property="className"      column="class_name"        />
 		<result property="tplCategory"    column="tpl_category"      />
-		<result property="tplWebType"     column="tpl_web_type"      />
 		<result property="packageName"    column="package_name"      />
 		<result property="moduleName"     column="module_name"       />
 		<result property="businessName"   column="business_name"     />
@@ -26,39 +25,39 @@
 		<result property="updateBy"       column="update_by"         />
 		<result property="updateTime"     column="update_time"       />
 		<result property="remark"         column="remark"            />
-		<collection  property="columns"   javaType="java.util.List"  resultMap="GenTableColumnResult" />
+		<collection  property="columns"  javaType="java.util.List"  resultMap="GenTableColumnResult" />
 	</resultMap>
-	
+
 	<resultMap type="GenTableColumn" id="GenTableColumnResult">
-        <id     property="columnId"       column="column_id"      />
-        <result property="tableId"        column="table_id"       />
-        <result property="columnName"     column="column_name"    />
-        <result property="columnComment"  column="column_comment" />
-        <result property="columnType"     column="column_type"    />
-        <result property="javaType"       column="java_type"      />
-        <result property="javaField"      column="java_field"     />
-        <result property="isPk"           column="is_pk"          />
-        <result property="isIncrement"    column="is_increment"   />
-        <result property="isRequired"     column="is_required"    />
-        <result property="isInsert"       column="is_insert"      />
-        <result property="isEdit"         column="is_edit"        />
-        <result property="isList"         column="is_list"        />
-        <result property="isQuery"        column="is_query"       />
-        <result property="queryType"      column="query_type"     />
-        <result property="htmlType"       column="html_type"      />
-        <result property="dictType"       column="dict_type"      />
-        <result property="sort"           column="sort"           />
-        <result property="createBy"       column="create_by"      />
-        <result property="createTime"     column="create_time"    />
-        <result property="updateBy"       column="update_by"      />
-        <result property="updateTime"     column="update_time"    />
-    </resultMap>
-	
+		<id     property="columnId"       column="column_id"      />
+		<result property="tableId"        column="table_id"       />
+		<result property="columnName"     column="column_name"    />
+		<result property="columnComment"  column="column_comment" />
+		<result property="columnType"     column="column_type"    />
+		<result property="javaType"       column="java_type"      />
+		<result property="javaField"      column="java_field"     />
+		<result property="isPk"           column="is_pk"          />
+		<result property="isIncrement"    column="is_increment"   />
+		<result property="isRequired"     column="is_required"    />
+		<result property="isInsert"       column="is_insert"      />
+		<result property="isEdit"         column="is_edit"        />
+		<result property="isList"         column="is_list"        />
+		<result property="isQuery"        column="is_query"       />
+		<result property="queryType"      column="query_type"     />
+		<result property="htmlType"       column="html_type"      />
+		<result property="dictType"       column="dict_type"      />
+		<result property="sort"           column="sort"           />
+		<result property="createBy"       column="create_by"      />
+		<result property="createTime"     column="create_time"    />
+		<result property="updateBy"       column="update_by"      />
+		<result property="updateTime"     column="update_time"    />
+	</resultMap>
+
 	<sql id="selectGenTableVo">
-        select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, tpl_web_type, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table
-    </sql>
-    
-    <select id="selectGenTableList" parameterType="GenTable" resultMap="GenTableResult">
+		select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table
+	</sql>
+
+	<select id="selectGenTableList" parameterType="GenTable" resultMap="GenTableResult">
 		<include refid="selectGenTableVo"/>
 		<where>
 			<if test="tableName != null and tableName != ''">
@@ -68,143 +67,161 @@
 				AND lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
 			</if>
 			<if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-				AND date_format(create_time,'%Y%m%d') &gt;= date_format(#{params.beginTime},'%Y%m%d')
+				<!--				and <![CDATA[ create_time >= convert(datetime, #{params.beginTime}, 20)]]>-->
+				and datediff(d, create_time, #{params.beginTime}) <![CDATA[<=]]> 0
 			</if>
 			<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-				AND date_format(create_time,'%Y%m%d') &lt;= date_format(#{params.endTime},'%Y%m%d')
+				<!--				and <![CDATA[ create_time <= convert(datetime, #{params.endTime}, 20)]]>-->
+				and datediff(d, create_time, #{params.endTime}) <![CDATA[>=]]> 0
 			</if>
 		</where>
 	</select>
 
 	<select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">
-		select table_name, table_comment, create_time, update_time from information_schema.tables
-		where table_schema = (select database())
-		AND table_name NOT LIKE 'qrtz\_%' AND table_name NOT LIKE 'gen\_%'
-		AND table_name NOT IN (select table_name from gen_table)
+		SELECT
+		so.name as table_name,
+		sep.value as table_comment,
+		so.create_date as create_time,
+		so.modify_date as update_time
+		FROM
+		sys.objects as so
+		LEFT JOIN sys.extended_properties as sep on so.object_id = sep.major_id
+		WHERE
+		so.type = 'U'
+		AND sep.minor_id = 0
+		AND so.name NOT LIKE 'qrtz_%' AND so.name NOT LIKE 'gen_%'
+		AND so.name NOT LIKE 'act_%'  AND so.name NOT LIKE 'flw_%'
+		AND so.name NOT IN (select table_name from gen_table)
 		<if test="tableName != null and tableName != ''">
-			AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
+			AND lower(so.name) like lower(concat('%', #{tableName}, '%'))
 		</if>
 		<if test="tableComment != null and tableComment != ''">
-			AND lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
+			AND lower(cast(sep.value as nvarchar)) like lower(concat('%', #{tableComment}, '%'))
 		</if>
 		<if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� -->
-			AND date_format(create_time,'%Y%m%d') &gt;= date_format(#{params.beginTime},'%Y%m%d')
+			<!--			and <![CDATA[ create_time >= convert(datetime, #{params.beginTime}, 20)]]>-->
+			and datediff(d, so.create_date, #{params.beginTime}) <![CDATA[<=]]> 0
 		</if>
 		<if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-			AND date_format(create_time,'%Y%m%d') &lt;= date_format(#{params.endTime},'%Y%m%d')
+			<!--			and <![CDATA[ create_time <= convert(datetime, #{params.endTime}, 20)]]>-->
+			and datediff(d, so.create_date, #{params.endTime}) <![CDATA[>=]]> 0
 		</if>
-        order by create_time desc
+		order by so.create_date desc
 	</select>
-	
+
 	<select id="selectDbTableListByNames" resultMap="GenTableResult">
-		select table_name, table_comment, create_time, update_time from information_schema.tables
-		where table_name NOT LIKE 'qrtz\_%' and table_name NOT LIKE 'gen\_%' and table_schema = (select database())
-		and table_name in
-	    <foreach collection="array" item="name" open="(" separator="," close=")">
- 			#{name}
-        </foreach> 
+		SELECT
+		SO.name table_name,
+		SEP.VALUE table_comment,
+		SO.create_date create_time,
+		SO.modify_date update_time
+		FROM
+		sys.objects AS SO
+		LEFT JOIN sys.extended_properties AS SEP ON SO.object_id = SEP.major_id
+		WHERE
+		SO.type = 'U'
+		AND SEP.minor_id = 0
+		and SO.name NOT LIKE 'qrtz_%' and SO.name NOT LIKE 'gen_%'
+		AND so.name NOT LIKE 'act_%'  AND so.name NOT LIKE 'flw_%'
+		and SO.name in
+		<foreach collection="array" item="name" open="(" separator="," close=")">
+			#{name}
+		</foreach>
 	</select>
-	
+
 	<select id="selectTableByName" parameterType="String" resultMap="GenTableResult">
 		select table_name, table_comment, create_time, update_time from information_schema.tables
 		where table_comment <![CDATA[ <> ]]> '' and table_schema = (select database())
-		and table_name = #{tableName}
+		  and table_name = #{tableName}
 	</select>
-	
+
 	<select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult">
-	    SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.tpl_web_type, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
+		SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
 			   c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
 		FROM gen_table t
-			 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
+				 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
 		where t.table_id = #{tableId} order by c.sort
 	</select>
-	
+
 	<select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult">
-	    SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.tpl_web_type, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
+		SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
 			   c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
 		FROM gen_table t
-			 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
+				 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
 		where t.table_name = #{tableName} order by c.sort
 	</select>
-	
+
 	<select id="selectGenTableAll" parameterType="String" resultMap="GenTableResult">
-	    SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.tpl_web_type, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
+		SELECT t.table_id, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.options, t.remark,
 			   c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
 		FROM gen_table t
-			 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
+				 LEFT JOIN gen_table_column c ON t.table_id = c.table_id
 		order by c.sort
 	</select>
-	
+
 	<insert id="insertGenTable" parameterType="GenTable" useGeneratedKeys="true" keyProperty="tableId">
-        insert into gen_table (
-			<if test="tableName != null">table_name,</if>
-			<if test="tableComment != null and tableComment != ''">table_comment,</if>
-			<if test="className != null and className != ''">class_name,</if>
-			<if test="tplCategory != null and tplCategory != ''">tpl_category,</if>
-			<if test="tplWebType != null and tplWebType != ''">tpl_web_type,</if>
-			<if test="packageName != null and packageName != ''">package_name,</if>
-			<if test="moduleName != null and moduleName != ''">module_name,</if>
-			<if test="businessName != null and businessName != ''">business_name,</if>
-			<if test="functionName != null and functionName != ''">function_name,</if>
-			<if test="functionAuthor != null and functionAuthor != ''">function_author,</if>
-			<if test="genType != null and genType != ''">gen_type,</if>
-			<if test="genPath != null and genPath != ''">gen_path,</if>
-			<if test="remark != null and remark != ''">remark,</if>
- 			<if test="createBy != null and createBy != ''">create_by,</if>
-			create_time
-         )values(
-			<if test="tableName != null">#{tableName},</if>
-			<if test="tableComment != null and tableComment != ''">#{tableComment},</if>
-			<if test="className != null and className != ''">#{className},</if>
-			<if test="tplCategory != null and tplCategory != ''">#{tplCategory},</if>
-			<if test="tplWebType != null and tplWebType != ''">#{tplWebType},</if>
-			<if test="packageName != null and packageName != ''">#{packageName},</if>
-			<if test="moduleName != null and moduleName != ''">#{moduleName},</if>
-			<if test="businessName != null and businessName != ''">#{businessName},</if>
-			<if test="functionName != null and functionName != ''">#{functionName},</if>
-			<if test="functionAuthor != null and functionAuthor != ''">#{functionAuthor},</if>
-			<if test="genType != null and genType != ''">#{genType},</if>
-			<if test="genPath != null and genPath != ''">#{genPath},</if>
-			<if test="remark != null and remark != ''">#{remark},</if>
- 			<if test="createBy != null and createBy != ''">#{createBy},</if>
-			sysdate()
-         )
-    </insert>
-    
-    <update id="createTable">
-        ${sql}
-    </update>
-    
-    <update id="updateGenTable" parameterType="GenTable">
-        update gen_table
-        <set>
-            <if test="tableName != null">table_name = #{tableName},</if>
-            <if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},</if>
-            <if test="subTableName != null">sub_table_name = #{subTableName},</if>
-            <if test="subTableFkName != null">sub_table_fk_name = #{subTableFkName},</if>
-            <if test="className != null and className != ''">class_name = #{className},</if>
-            <if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},</if>
-            <if test="genType != null and genType != ''">gen_type = #{genType},</if>
-            <if test="genPath != null and genPath != ''">gen_path = #{genPath},</if>
-            <if test="tplCategory != null and tplCategory != ''">tpl_category = #{tplCategory},</if>
-            <if test="tplWebType != null and tplWebType != ''">tpl_web_type = #{tplWebType},</if>
-            <if test="packageName != null and packageName != ''">package_name = #{packageName},</if>
-            <if test="moduleName != null and moduleName != ''">module_name = #{moduleName},</if>
-            <if test="businessName != null and businessName != ''">business_name = #{businessName},</if>
-            <if test="functionName != null and functionName != ''">function_name = #{functionName},</if>
-            <if test="options != null and options != ''">options = #{options},</if>
-            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
-            <if test="remark != null">remark = #{remark},</if>
-            update_time = sysdate()
-        </set>
-        where table_id = #{tableId}
-    </update>
-    
-    <delete id="deleteGenTableByIds" parameterType="Long">
-        delete from gen_table where table_id in 
-        <foreach collection="array" item="tableId" open="(" separator="," close=")">
-            #{tableId}
-        </foreach>
-    </delete>
+		insert into gen_table (
+		<if test="tableName != null">table_name,</if>
+		<if test="tableComment != null and tableComment != ''">table_comment,</if>
+		<if test="className != null and className != ''">class_name,</if>
+		<if test="tplCategory != null and tplCategory != ''">tpl_category,</if>
+		<if test="packageName != null and packageName != ''">package_name,</if>
+		<if test="moduleName != null and moduleName != ''">module_name,</if>
+		<if test="businessName != null and businessName != ''">business_name,</if>
+		<if test="functionName != null and functionName != ''">function_name,</if>
+		<if test="functionAuthor != null and functionAuthor != ''">function_author,</if>
+		<if test="genType != null and genType != ''">gen_type,</if>
+		<if test="genPath != null and genPath != ''">gen_path,</if>
+		<if test="remark != null and remark != ''">remark,</if>
+		<if test="createBy != null and createBy != ''">create_by,</if>
+		create_time
+		)values(
+		<if test="tableName != null">#{tableName},</if>
+		<if test="tableComment != null and tableComment != ''">#{tableComment},</if>
+		<if test="className != null and className != ''">#{className},</if>
+		<if test="tplCategory != null and tplCategory != ''">#{tplCategory},</if>
+		<if test="packageName != null and packageName != ''">#{packageName},</if>
+		<if test="moduleName != null and moduleName != ''">#{moduleName},</if>
+		<if test="businessName != null and businessName != ''">#{businessName},</if>
+		<if test="functionName != null and functionName != ''">#{functionName},</if>
+		<if test="functionAuthor != null and functionAuthor != ''">#{functionAuthor},</if>
+		<if test="genType != null and genType != ''">#{genType},</if>
+		<if test="genPath != null and genPath != ''">#{genPath},</if>
+		<if test="remark != null and remark != ''">#{remark},</if>
+		<if test="createBy != null and createBy != ''">#{createBy},</if>
+		getdate()
+		)
+	</insert>
+
+	<update id="updateGenTable" parameterType="GenTable">
+		update gen_table
+		<set>
+			<if test="tableName != null">table_name = #{tableName},</if>
+			<if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},</if>
+			<if test="subTableName != null">sub_table_name = #{subTableName},</if>
+			<if test="subTableFkName != null">sub_table_fk_name = #{subTableFkName},</if>
+			<if test="className != null and className != ''">class_name = #{className},</if>
+			<if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},</if>
+			<if test="genType != null and genType != ''">gen_type = #{genType},</if>
+			<if test="genPath != null and genPath != ''">gen_path = #{genPath},</if>
+			<if test="tplCategory != null and tplCategory != ''">tpl_category = #{tplCategory},</if>
+			<if test="packageName != null and packageName != ''">package_name = #{packageName},</if>
+			<if test="moduleName != null and moduleName != ''">module_name = #{moduleName},</if>
+			<if test="businessName != null and businessName != ''">business_name = #{businessName},</if>
+			<if test="functionName != null and functionName != ''">function_name = #{functionName},</if>
+			<if test="options != null and options != ''">options = #{options},</if>
+			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+			<if test="remark != null">remark = #{remark},</if>
+			update_time = getdate()
+		</set>
+		where table_id = #{tableId}
+	</update>
+
+	<delete id="deleteGenTableByIds" parameterType="Long">
+		delete from gen_table where table_id in
+		<foreach collection="array" item="tableId" open="(" separator="," close=")">
+			#{tableId}
+		</foreach>
+	</delete>
 
 </mapper>
\ No newline at end of file
diff --git a/billion-main/pom.xml b/billion-main/pom.xml
index 2676c97..8062eac 100644
--- a/billion-main/pom.xml
+++ b/billion-main/pom.xml
@@ -60,17 +60,17 @@
         </dependency>
 
         <!-- opc start-->
-        <dependency>
-            <groupId>com.kangaroohy</groupId>
-            <artifactId>milo-spring-boot-starter</artifactId>
-            <version>3.0.4</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.kangaroohy</groupId>-->
+<!--            <artifactId>milo-spring-boot-starter</artifactId>-->
+<!--            <version>3.0.4</version>-->
+<!--        </dependency>-->
         <!-- opc end-->
 
-        <dependency>
-            <groupId>com.billion</groupId>
-            <artifactId>billion-quartz</artifactId>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.billion</groupId>-->
+<!--            <artifactId>billion-quartz</artifactId>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis</artifactId>
@@ -87,6 +87,11 @@
             <artifactId>hutool-all</artifactId>
             <version>5.8.22</version>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.22</version>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/billion-main/src/main/java/com/billion/main/da/controller/DaStationCollectionController.java b/billion-main/src/main/java/com/billion/main/da/controller/DaStationCollectionController.java
index dae407a..2d46f00 100644
--- a/billion-main/src/main/java/com/billion/main/da/controller/DaStationCollectionController.java
+++ b/billion-main/src/main/java/com/billion/main/da/controller/DaStationCollectionController.java
@@ -1,18 +1,30 @@
 package com.billion.main.da.controller;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.billion.common.annotation.Log;
 import com.billion.common.core.controller.BaseController;
 import com.billion.common.core.domain.AjaxResult;
+import com.billion.common.core.domain.R;
 import com.billion.common.core.page.TableDataInfo;
 import com.billion.common.enums.BusinessType;
+import com.billion.common.exception.ServiceException;
 import com.billion.common.utils.poi.ExcelUtil;
 import com.billion.main.da.domain.DaStationCollection;
-import com.billion.main.da.service.IDaStationCollectionService;
+import com.billion.main.da.service.impl.DaStationCollectionServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.rmi.ServerError;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -26,7 +38,7 @@
 public class DaStationCollectionController extends BaseController
 {
     @Autowired
-    private IDaStationCollectionService daStationCollectionService;
+    private DaStationCollectionServiceImpl daStationCollectionService;
 
     /**
      * 鏌ヨ杩囩珯閲囬泦鍒楄〃
@@ -38,6 +50,13 @@
         startPage();
         List<DaStationCollection> list = daStationCollectionService.selectDaStationCollectionList(daStationCollection);
         return getDataTable(list);
+    }
+
+    @GetMapping("/printList")
+    public R printList()
+    {
+        List<DaStationCollection> list = daStationCollectionService.list(new LambdaQueryWrapper<DaStationCollection>().eq(DaStationCollection::getStatus,"0"));
+        return R.ok(list);
     }
 
     /**
@@ -90,9 +109,122 @@
      */
     @PreAuthorize("@ss.hasPermi('da:stationCollection:remove')")
     @Log(title = "杩囩珯閲囬泦", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids)
+	@DeleteMapping("/{id}")
+    public R remove(@PathVariable Long id)
     {
-        return toAjax(daStationCollectionService.deleteDaStationCollectionByIds(ids));
+        if (ObjUtil.isNull(id)){
+            throw new ServiceException("id涓嶈兘涓虹┖");
+        }
+        List<DaStationCollection> list = daStationCollectionService.list(new LambdaQueryWrapper<DaStationCollection>().eq(DaStationCollection::getId, id));
+        if (CollUtil.isEmpty(list)){
+            throw new ServiceException("鏁版嵁涓嶅瓨鍦紝璇峰埛鏂板悗閲嶈瘯");
+        }
+        daStationCollectionService.removeById(id);
+        return R.ok();
     }
+
+
+    @GetMapping("/crave")
+    public R crave(String sfcCode) throws IOException {
+        if (StrUtil.isBlank(sfcCode)){
+            throw new ServiceException("搴忓垪鍙蜂笉鑳戒负绌�");
+        }
+        if (!sfcCode.contains(StrUtil.SPACE)){
+            throw new ServiceException("杈撳叆鐨勫簭鍒楀彿闇�瑕佸寘鍚┖鏍硷紒");
+        }
+
+        List<DaStationCollection> list = daStationCollectionService.list(new LambdaQueryWrapper<DaStationCollection>()
+                .eq(DaStationCollection::getSfcCode, sfcCode)
+                .eq(DaStationCollection::getLocationCode,"OP001"));
+        if (CollUtil.isNotEmpty(list)){
+            DaStationCollection daStationCollection = list.get(0);
+            //閲嶅鍒荤爜
+            return R.ok(303,"姝ゅ簭鍒楀彿宸插埢鐮�");
+        } else {
+//            //棣栨鍒荤爜-鍙戦�佸埢鐮佷俊鍙风粰涓嬩綅鏈�
+//            TcpClient tcpClient = new TcpClient();
+//            byte[] bytes = sfcCode.getBytes(StandardCharsets.UTF_8);
+//            tcpClient.sendData(bytes);
+            //鏌ヨ鏁版嵁涓姸鎬佷负0鐨勬暟鎹�
+            List<DaStationCollection> collect = daStationCollectionService.list(new LambdaQueryWrapper<DaStationCollection>()
+                    .eq(DaStationCollection::getStatus, "0"));
+            if (CollUtil.isNotEmpty(collect)) {
+                //娓呴櫎
+                daStationCollectionService.update(new LambdaUpdateWrapper<DaStationCollection>()
+                        .eq(DaStationCollection::getStatus,"0")
+                        .set(DaStationCollection::getStatus,"1"));
+            }
+
+            //淇濆瓨鏁版嵁
+            DaStationCollection daStationCollection = new DaStationCollection();
+            Date date = new Date();
+            daStationCollection.setSfcCode(sfcCode);
+            List<String> split = ListUtil.toList(sfcCode.split(StrUtil.SPACE));
+            if (CollUtil.isNotEmpty(split)){
+                if (split.size() > 1){
+                    daStationCollection.setPrintCode(split.get(1));
+                }
+            }
+            daStationCollection.setLocationCode("OP001");
+            daStationCollection.setCollectTime(date);
+            daStationCollection.setInboundTime(date);
+            daStationCollection.setOutboundTime(date);
+            daStationCollection.setStatus("0");
+            daStationCollectionService.save(daStationCollection);
+            return R.ok(200);
+
+        }
+
+    }
+
+
+    @GetMapping("/reCrave")
+    public R reCrave(String sfcCode) throws IOException {
+        if (StrUtil.isBlank(sfcCode)){
+            throw new ServiceException("搴忓垪鍙蜂笉鑳戒负绌�");
+        }
+        if (!sfcCode.contains(StrUtil.SPACE)){
+            throw new ServiceException("杈撳叆鐨勫簭鍒楀彿闇�瑕佸寘鍚┖鏍硷紒");
+        }
+//        //鍙戦�佸埢鐮佷俊鍙风粰涓嬩綅鏈�
+//            TcpClient tcpClient = new TcpClient();
+//            byte[] bytes = sfcCode.getBytes(StandardCharsets.UTF_8);
+//            tcpClient.sendData(bytes);
+
+        List<DaStationCollection> collect = daStationCollectionService.list(new LambdaQueryWrapper<DaStationCollection>()
+                .eq(DaStationCollection::getStatus, "0"));
+        if (CollUtil.isNotEmpty(collect)) {
+            //娓呴櫎
+            daStationCollectionService.update(new LambdaUpdateWrapper<DaStationCollection>()
+                    .eq(DaStationCollection::getStatus,"0")
+                    .set(DaStationCollection::getStatus,"1"));
+        }
+
+        //淇濆瓨鏁版嵁
+        DaStationCollection daStationCollection = new DaStationCollection();
+        Date date = new Date();
+        daStationCollection.setSfcCode(sfcCode);
+        List<String> split = ListUtil.toList(sfcCode.split(StrUtil.SPACE));
+        if (CollUtil.isNotEmpty(split)){
+            if (split.size() > 1){
+                daStationCollection.setPrintCode(split.get(1));
+            }
+        }
+        daStationCollection.setLocationCode("OP001");
+        daStationCollection.setCollectTime(date);
+        daStationCollection.setInboundTime(date);
+        daStationCollection.setOutboundTime(date);
+        daStationCollection.setStatus("0");
+        daStationCollectionService.save(daStationCollection);
+        return R.ok(200);
+
+
+    }
+
+
+//    @GetMapping("/testSend")
+//    public void test(){
+//        TcpClient tcpClient = new TcpClient();
+//        tcpClient.receiveData();
+//    }
 }
diff --git a/billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java b/billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java
index 176d4a1..a59d7b8 100644
--- a/billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java
+++ b/billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java
@@ -48,4 +48,7 @@
     private Date collectTime;
 
 
+    private String printCode;
+
+
 }
diff --git a/billion-main/src/main/java/com/billion/main/plc/CustomRunner.java b/billion-main/src/main/java/com/billion/main/plc/CustomRunner.java
index 3adedfa..3abd2bc 100644
--- a/billion-main/src/main/java/com/billion/main/plc/CustomRunner.java
+++ b/billion-main/src/main/java/com/billion/main/plc/CustomRunner.java
@@ -1,61 +1,61 @@
-package com.billion.main.plc;
-
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
-import com.billion.main.da.service.IDaParamCollectionService;
-import com.billion.main.da.service.IDaStationCollectionService;
-import com.billion.main.plc.constant.Constants;
-import com.billion.main.plc.sub.OPCUaSubscription;
-import com.billion.main.sc.domain.ScOpcConf;
-import com.billion.main.sc.service.IScCollectionParamConfService;
-import com.billion.main.sc.service.IScOpcConfService;
-import com.kangaroohy.milo.service.MiloService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Component
-public class CustomRunner implements ApplicationRunner {
-
-    @Autowired
-    private MiloService miloService;
-    @Autowired
-    private IScOpcConfService opcConfService;
-    @Autowired
-    private IScCollectionParamConfService collectionParamConfService;
-    @Autowired
-    private IDaParamCollectionService paramCollectionService;
-    @Autowired
-    private IDaStationCollectionService stationCollectionService;
-
-    @Override
-    public void run(ApplicationArguments args) throws Exception {
-
-        OPCUaSubscription opcUaSubscription = new OPCUaSubscription(
-                miloService,
-                collectionParamConfService,
-                paramCollectionService,
-                stationCollectionService);
-
-        List<String> lists = getSubList();
-        System.out.println("璁㈤槄鍐呭锛�"+lists);
-        miloService.subscriptionFromOpcUa(lists,50,opcUaSubscription);
-
-    }
-
-    /**
-     * 璁㈤槄鍐呭
-     */
-    public List<String> getSubList(){
-        List<String> lists = opcConfService.list(new LambdaQueryWrapper<ScOpcConf>()
-                        .eq(ScOpcConf::getSubscribe,Constants.YES))
-                .stream().map(ScOpcConf::getNode).collect(Collectors.toList());
-        return lists;
-    }
-}
-
+//package com.billion.main.plc;
+//
+//
+//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+//import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+//import com.billion.main.da.service.IDaParamCollectionService;
+//import com.billion.main.da.service.IDaStationCollectionService;
+//import com.billion.main.plc.constant.Constants;
+//import com.billion.main.plc.sub.OPCUaSubscription;
+//import com.billion.main.sc.domain.ScOpcConf;
+//import com.billion.main.sc.service.IScCollectionParamConfService;
+//import com.billion.main.sc.service.IScOpcConfService;
+//import com.kangaroohy.milo.service.MiloService;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.ApplicationArguments;
+//import org.springframework.boot.ApplicationRunner;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.List;
+//import java.util.stream.Collectors;
+//
+//@Component
+//public class CustomRunner implements ApplicationRunner {
+//
+//    @Autowired
+//    private MiloService miloService;
+//    @Autowired
+//    private IScOpcConfService opcConfService;
+//    @Autowired
+//    private IScCollectionParamConfService collectionParamConfService;
+//    @Autowired
+//    private IDaParamCollectionService paramCollectionService;
+//    @Autowired
+//    private IDaStationCollectionService stationCollectionService;
+//
+//    @Override
+//    public void run(ApplicationArguments args) throws Exception {
+//
+//        OPCUaSubscription opcUaSubscription = new OPCUaSubscription(
+//                miloService,
+//                collectionParamConfService,
+//                paramCollectionService,
+//                stationCollectionService);
+//
+//        List<String> lists = getSubList();
+//        System.out.println("璁㈤槄鍐呭锛�"+lists);
+//        miloService.subscriptionFromOpcUa(lists,50,opcUaSubscription);
+//
+//    }
+//
+//    /**
+//     * 璁㈤槄鍐呭
+//     */
+//    public List<String> getSubList(){
+//        List<String> lists = opcConfService.list(new LambdaQueryWrapper<ScOpcConf>()
+//                        .eq(ScOpcConf::getSubscribe,Constants.YES))
+//                .stream().map(ScOpcConf::getNode).collect(Collectors.toList());
+//        return lists;
+//    }
+//}
+//
diff --git a/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java b/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java
index 5deb902..b777540 100644
--- a/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java
+++ b/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java
@@ -1,286 +1,237 @@
-package com.billion.main.plc.sub;
-
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.http.HttpRequest;
-import cn.hutool.http.HttpResponse;
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.billion.main.api.domain.StationST180;
-import com.billion.main.da.domain.DaParamCollection;
-import com.billion.main.da.service.IDaParamCollectionService;
-import com.billion.main.da.service.IDaStationCollectionService;
-import com.billion.main.plc.constant.Constants;
-import com.billion.main.sc.domain.ScCollectionParamConf;
-import com.billion.main.sc.service.IScCollectionParamConfService;
-import com.kangaroohy.milo.model.ReadWriteEntity;
-import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
-import com.kangaroohy.milo.service.MiloService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-import com.alibaba.fastjson.JSONObject;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.concurrent.CompletableFuture;
-import java.util.stream.Collectors;
-import java.lang.reflect.Field;
-
-
-@Slf4j
-@Component
-public class OPCUaSubscription implements SubscriptionCallback {
-
-    public static MiloService miloService;
-    public static IScCollectionParamConfService collectionParamConfService;
-    public static IDaParamCollectionService paramCollectionService;
-    public static IDaStationCollectionService stationCollectionService;
-
-    public OPCUaSubscription(MiloService miloService, IScCollectionParamConfService collectionParamConfService
-            ,IDaParamCollectionService paramCollectionService,IDaStationCollectionService stationCollectionService) {
-        OPCUaSubscription.miloService = miloService;
-        OPCUaSubscription.collectionParamConfService = collectionParamConfService;
-        OPCUaSubscription.paramCollectionService = paramCollectionService;
-        OPCUaSubscription.stationCollectionService = stationCollectionService;
-    }
-
-    @Override
-    public void onSubscribe(String identifier, Object value) {
-        log.info("鍦板潃锛�"+identifier+"鍊硷細"+value);
-        try {
-            if(null != value && !Constants.ZERO.equals(value.toString())) {
-                String[] nodes = identifier.split("[.]");
-                String thoroughfare = nodes[0];//閫氶亾
-                String device = nodes[1];//璁惧
-                String tab = nodes[2];//鏍囪
-                String valueString = value.toString();//鍦板潃鍊�
-
-                CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> {
-                    subHandle(thoroughfare,device,tab,valueString);
-                });
-
-            }
-        } catch (Exception e) {
-            log.error(e.getMessage());
-        }
-    }
-
-    public void subHandle(String thoroughfare,String device,String tab,String valueString){
-        try{
-            //鐩戝惉recordData
-            if(tab.equals(Constants.RECORD_DATA)){
-                //濡傛灉鏄�2鍋氬嚭绔欏鐞�
-                if(valueString.equals(Constants.TWO)){
-                    Integer result = Constants.INTEGER_TWO_ONE;
-                    result = saveParamCollection(device, "snCode", "stationStatus");
-                    miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build());
-                }
-            }
-        }catch (Exception e) {
-            log.error(e.getMessage());
-        }
-    }
-
-    /**
-     * 淇濆瓨杩囩珯鏁版嵁
-     *
-     * @param device       宸ヤ綅
-     * @param snCode       浜у搧搴忓垪鍙�
-     * @return Integer
-     * @throws Exception e
-     */
-    private static Integer savePassingStation(String device, String snCode,String stationStatus){
-        Integer result = 21;
-        try {
-
-
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-        return result;
-    }
-
-    /**
-     * 淇濆瓨鍙傛暟鏁版嵁鍜屽彂閫佸伐鍘侻ES
-     * @param device 宸ヤ綅
-     * @param snCode 浜у搧SN
-     * @param stationStatus 绔欑姸鎬�
-     * @return result
-     * @throws Exception e
-     */
-    private static Integer saveParamCollection(String device, String snCode, String stationStatus) {
-        Integer result = Constants.INTEGER_TWO_ONE;
-        try {
-            // 鏌ヨ鍙傛暟閰嶇疆琛�
-            List<ScCollectionParamConf> list = collectionParamConfService.list(new LambdaQueryWrapper<ScCollectionParamConf>()
-                    .eq(ScCollectionParamConf::getLocationCode, device)
-                    .eq(ScCollectionParamConf::getSubscribe, Constants.ONE)
-                    .orderByDesc(ScCollectionParamConf::getOrderNum)
-            );
-            
-            if (CollUtil.isNotEmpty(list)) {
-                // 鑾峰彇鍙傛暟鍊�
-                List<String> collect = list.stream()
-                        .map(ScCollectionParamConf::getNode)
-                        .collect(Collectors.toList());
-                List<ReadWriteEntity> readWriteEntityList = miloService.readFromOpcUa(collect);
-                
-                // 淇濆瓨閲囬泦鏁版嵁
-                saveCollectionData(device, snCode, list, readWriteEntityList);
-                
-                // 鍒涘缓宸ヤ綅瀵硅薄骞惰祴鍊�
-                Object stationObject = createStationObject(device, list, readWriteEntityList);
-                if (stationObject != null) {
-                    System.out.println("宸ヤ綅" + device + "瀵硅薄鍒涘缓鎴愬姛锛�" + stationObject);
-                    // 杩欓噷鍙互瀵瑰垱寤虹殑瀵硅薄杩涜杩涗竴姝ュ鐞�
-                    handleMesRequest(stationObject, device);
-                }
-            }
-
-        } catch (Exception e) {
-            log.error("淇濆瓨鏁版嵁寮傚父", e);
-            throw new RuntimeException("淇濆瓨鏁版嵁鍙戦�佸伐鍘侻ES寮傚父");
-        }
-        return result;
-    }
-
-    /**
-     * 淇濆瓨閲囬泦鏁版嵁
-     */
-    private static void saveCollectionData(String device, String snCode, 
-            List<ScCollectionParamConf> list, List<ReadWriteEntity> readWriteEntityList) {
-        ArrayList<DaParamCollection> collectionList = new ArrayList<>();
-        for (int i = 0; i < readWriteEntityList.size(); i++) {
-            DaParamCollection daParamCollection = new DaParamCollection();
-            daParamCollection.setSfcCode(snCode);
-            daParamCollection.setLocationCode(device);
-            daParamCollection.setParamCode(list.get(i).getParamCode());
-            daParamCollection.setParamName(list.get(i).getParamName());
-            daParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString());
-            daParamCollection.setCollectTime(new Date());
-            collectionList.add(daParamCollection);
-        }
-        paramCollectionService.insertBatch(collectionList);
-    }
-
-    /**
-     * 鍒涘缓宸ヤ綅瀵硅薄骞惰祴鍊�
-     */
-    private static Object createStationObject(String device, 
-            List<ScCollectionParamConf> list, List<ReadWriteEntity> readWriteEntityList) {
-        try {
-            // 鏋勫缓瀹屾暣鐨勭被鍚�
-            String className = "com.billion.main.api.domain.Station" + device;
-            Class<?> stationClass = Class.forName(className);
-            Object stationObject = stationClass.newInstance();
-
-            // 鑾峰彇鎵�鏈夊睘鎬�
-            Field[] fields = stationClass.getDeclaredFields();
-            
-            // 鍒涘缓鍙傛暟鍊糓ap锛屾柟渚挎煡鎵�
-            Map<String, String> paramValueMap = new HashMap<>();
-            for (int i = 0; i < list.size(); i++) {
-                paramValueMap.put(list.get(i).getParamCode(), 
-                    readWriteEntityList.get(i).getValue().toString());
-            }
-
-            // 鎸夐『搴忕粰灞炴�ц祴鍊�
-            for (Field field : fields) {
-                field.setAccessible(true);
-                String paramCode = field.getName(); // 鍋囪灞炴�у悕涓庡弬鏁扮紪鐮佷竴鑷�
-                String value = paramValueMap.get(paramCode);
-                
-                if (value != null) {
-                    // 鏍规嵁瀛楁绫诲瀷杞崲鍊�
-                    Object convertedValue = convertValue(value, field.getType());
-                    field.set(stationObject, convertedValue);
-                }
-            }
-
-            return stationObject;
-        } catch (Exception e) {
-            log.error("鍒涘缓宸ヤ綅瀵硅薄澶辫触锛�" + device, e);
-            return null;
-        }
-    }
-
-    /**
-     * 鏍规嵁瀛楁绫诲瀷杞崲鍊�
-     */
-    private static Object convertValue(String value, Class<?> type) {
-        if (type == String.class) {
-            return value;
-        } else if (type == Integer.class || type == int.class) {
-            return Integer.parseInt(value);
-        } else if (type == Double.class || type == double.class) {
-            return Double.parseDouble(value);
-        } else if (type == Float.class || type == float.class) {
-            return Float.parseFloat(value);
-        } else if (type == Long.class || type == long.class) {
-            return Long.parseLong(value);
-        } else if (type == Boolean.class || type == boolean.class) {
-            return Boolean.parseBoolean(value);
-        } else if (type == Date.class) {
-            try {
-                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                return sdf.parse(value);
-            } catch (ParseException e) {
-                return null;
-            }
-        }
-        return value;
-    }
-
-    private static void handleMesRequest(Object stationObject, String device) {
-        try {
-            // 鍙戦�丠TTP璇锋眰
-            HttpResponse response = HttpRequest.post(Constants.SY_MES_URL)
-                    .body(JSONUtil.toJsonStr(stationObject))
-                    .timeout(5000) // 璁剧疆瓒呮椂鏃堕棿
-                    .execute();
-
-            // 瑙f瀽鍝嶅簲
-            if (response.isOk()) { // 璇锋眰鎴愬姛
-                JSONObject jsonResponse = JSONUtil.parseObj(response.body());
-                String message = jsonResponse.getStr("message");
-                
-                if (!"ok".equals(message)) {
-                    // 鍝嶅簲涓嶆槸ok锛屼繚瀛樺け璐ヨ褰�
-                    saveMesFailRecord(stationObject, device, "鍝嶅簲寮傚父锛�" + message);
-                }
-            } else {
-                // HTTP璇锋眰澶辫触锛屼繚瀛樺け璐ヨ褰�
-                saveMesFailRecord(stationObject, device, "HTTP鐘舵�佺爜锛�" + response.getStatus());
-            }
-        } catch (Exception e) {
-            // 鍙戠敓寮傚父锛堟瘮濡傝繛鎺ヨ秴鏃躲�佹湇鍔′笉鍙敤绛夛級锛屼繚瀛樺け璐ヨ褰�
-            saveMesFailRecord(stationObject, device, "璇锋眰寮傚父锛�" + e.getMessage());
-        }
-    }
-
-    /**
-     * 淇濆瓨MES鎺ㄩ�佸け璐ヨ褰�
-     */
-    private static void saveMesFailRecord(Object stationObject, String device, String errorMsg) {
-        try {
-            MesFailRecord failRecord = new MesFailRecord();
-            failRecord.setDeviceCode(device);
-            failRecord.setRequestData(JSONUtil.toJsonStr(stationObject));
-            failRecord.setErrorMsg(errorMsg);
-            failRecord.setCreateTime(new Date());
-            failRecord.setStatus(0); // 0:鏈鐞� 1:宸插鐞�
-            failRecord.setRetryCount(0); // 閲嶈瘯娆℃暟
-            
-            // 淇濆瓨鍒版暟鎹簱
-            mesFailRecordService.save(failRecord);
-            
-            log.error("MES鎺ㄩ�佸け璐ワ紝宸蹭繚瀛樺け璐ヨ褰曘�傝澶囷細{}锛岄敊璇細{}", device, errorMsg);
-        } catch (Exception e) {
-            log.error("淇濆瓨MES澶辫触璁板綍鏃跺彂鐢熼敊璇�", e);
-        }
-    }
-
-}
+//package com.billion.main.plc.sub;
+//
+//
+//import cn.hutool.core.collection.CollUtil;
+//import cn.hutool.core.util.ObjectUtil;
+//import cn.hutool.http.HttpRequest;
+//import cn.hutool.http.HttpResponse;
+//import cn.hutool.json.JSONUtil;
+//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+//import com.billion.main.api.domain.StationST180;
+//import com.billion.main.da.domain.DaParamCollection;
+//import com.billion.main.da.service.IDaParamCollectionService;
+//import com.billion.main.da.service.IDaStationCollectionService;
+//import com.billion.main.plc.constant.Constants;
+//import com.billion.main.sc.domain.ScCollectionParamConf;
+//import com.billion.main.sc.service.IScCollectionParamConfService;
+//import com.kangaroohy.milo.model.ReadWriteEntity;
+//import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
+//import com.kangaroohy.milo.service.MiloService;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.stereotype.Component;
+//import com.alibaba.fastjson.JSONObject;
+//
+//import java.text.ParseException;
+//import java.text.SimpleDateFormat;
+//import java.util.*;
+//import java.util.concurrent.CompletableFuture;
+//import java.util.stream.Collectors;
+//import java.lang.reflect.Field;
+//
+//
+//@Slf4j
+//@Component
+//public class OPCUaSubscription implements SubscriptionCallback {
+//
+//    public static MiloService miloService;
+//    public static IScCollectionParamConfService collectionParamConfService;
+//    public static IDaParamCollectionService paramCollectionService;
+//    public static IDaStationCollectionService stationCollectionService;
+//
+//    public OPCUaSubscription(MiloService miloService, IScCollectionParamConfService collectionParamConfService
+//            ,IDaParamCollectionService paramCollectionService,IDaStationCollectionService stationCollectionService) {
+//        OPCUaSubscription.miloService = miloService;
+//        OPCUaSubscription.collectionParamConfService = collectionParamConfService;
+//        OPCUaSubscription.paramCollectionService = paramCollectionService;
+//        OPCUaSubscription.stationCollectionService = stationCollectionService;
+//    }
+//
+//    @Override
+//    public void onSubscribe(String identifier, Object value) {
+//        log.info("鍦板潃锛�"+identifier+"鍊硷細"+value);
+//        try {
+//            if(null != value && !Constants.ZERO.equals(value.toString())) {
+//                String[] nodes = identifier.split("[.]");
+//                String thoroughfare = nodes[0];//閫氶亾
+//                String device = nodes[1];//璁惧
+//                String tab = nodes[2];//鏍囪
+//                String valueString = value.toString();//鍦板潃鍊�
+//
+//                CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> {
+//                    subHandle(thoroughfare,device,tab,valueString);
+//                });
+//
+//            }
+//        } catch (Exception e) {
+//            log.error(e.getMessage());
+//        }
+//    }
+//
+//    public void subHandle(String thoroughfare,String device,String tab,String valueString){
+//        try{
+//            //鐩戝惉recordData
+//            if(tab.equals(Constants.RECORD_DATA)){
+//                //濡傛灉鏄�2鍋氬嚭绔欏鐞�
+//                if(valueString.equals(Constants.TWO)){
+//                    Integer result = Constants.INTEGER_TWO_ONE;
+//                    result = saveParamCollection(device, "snCode", "stationStatus");
+//                    miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build());
+//                }
+//            }
+//        }catch (Exception e) {
+//            log.error(e.getMessage());
+//        }
+//    }
+//
+//    /**
+//     * 淇濆瓨杩囩珯鏁版嵁
+//     *
+//     * @param device       宸ヤ綅
+//     * @param snCode       浜у搧搴忓垪鍙�
+//     * @return Integer
+//     * @throws Exception e
+//     */
+//    private static Integer savePassingStation(String device, String snCode,String stationStatus){
+//        Integer result = 21;
+//        try {
+//
+//
+//        } catch (Exception e) {
+//            throw new RuntimeException(e);
+//        }
+//
+//        return result;
+//    }
+//
+//    /**
+//     * 淇濆瓨鍙傛暟鏁版嵁鍜屽彂閫佸伐鍘侻ES
+//     * @param device 宸ヤ綅
+//     * @param snCode 浜у搧SN
+//     * @param stationStatus 绔欑姸鎬�
+//     * @return result
+//     * @throws Exception e
+//     */
+//    private static Integer saveParamCollection(String device, String snCode, String stationStatus) {
+//        Integer result = Constants.INTEGER_TWO_ONE;
+//        try {
+//            // 鏌ヨ鍙傛暟閰嶇疆琛�
+//            List<ScCollectionParamConf> list = collectionParamConfService.list(new LambdaQueryWrapper<ScCollectionParamConf>()
+//                    .eq(ScCollectionParamConf::getLocationCode, device)
+//                    .eq(ScCollectionParamConf::getSubscribe, Constants.ONE)
+//                    .orderByDesc(ScCollectionParamConf::getOrderNum)
+//            );
+//
+//            if (CollUtil.isNotEmpty(list)) {
+//                // 鑾峰彇鍙傛暟鍊�
+//                List<String> collect = list.stream()
+//                        .map(ScCollectionParamConf::getNode)
+//                        .collect(Collectors.toList());
+//                List<ReadWriteEntity> readWriteEntityList = miloService.readFromOpcUa(collect);
+//
+//                // 淇濆瓨閲囬泦鏁版嵁
+//                saveCollectionData(device, snCode, list, readWriteEntityList);
+//
+//                // 鍒涘缓宸ヤ綅瀵硅薄骞惰祴鍊�
+//                Object stationObject = createStationObject(device, list, readWriteEntityList);
+//                if (stationObject != null) {
+//                    System.out.println("宸ヤ綅" + device + "瀵硅薄鍒涘缓鎴愬姛锛�" + stationObject);
+//                    // 杩欓噷鍙互瀵瑰垱寤虹殑瀵硅薄杩涜杩涗竴姝ュ鐞�
+//
+//                }
+//            }
+//
+//        } catch (Exception e) {
+//            log.error("淇濆瓨鏁版嵁寮傚父", e);
+//            throw new RuntimeException("淇濆瓨鏁版嵁鍙戦�佸伐鍘侻ES寮傚父");
+//        }
+//        return result;
+//    }
+//
+//    /**
+//     * 淇濆瓨閲囬泦鏁版嵁
+//     */
+//    private static void saveCollectionData(String device, String snCode,
+//            List<ScCollectionParamConf> list, List<ReadWriteEntity> readWriteEntityList) {
+//        ArrayList<DaParamCollection> collectionList = new ArrayList<>();
+//        for (int i = 0; i < readWriteEntityList.size(); i++) {
+//            DaParamCollection daParamCollection = new DaParamCollection();
+//            daParamCollection.setSfcCode(snCode);
+//            daParamCollection.setLocationCode(device);
+//            daParamCollection.setParamCode(list.get(i).getParamCode());
+//            daParamCollection.setParamName(list.get(i).getParamName());
+//            daParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString());
+//            daParamCollection.setCollectTime(new Date());
+//            collectionList.add(daParamCollection);
+//        }
+//        paramCollectionService.insertBatch(collectionList);
+//    }
+//
+//    /**
+//     * 鍒涘缓宸ヤ綅瀵硅薄骞惰祴鍊�
+//     */
+//    private static Object createStationObject(String device,
+//            List<ScCollectionParamConf> list, List<ReadWriteEntity> readWriteEntityList) {
+//        try {
+//            // 鏋勫缓瀹屾暣鐨勭被鍚�
+//            String className = "com.billion.main.api.domain.Station" + device;
+//            Class<?> stationClass = Class.forName(className);
+//            Object stationObject = stationClass.newInstance();
+//
+//            // 鑾峰彇鎵�鏈夊睘鎬�
+//            Field[] fields = stationClass.getDeclaredFields();
+//
+//            // 鍒涘缓鍙傛暟鍊糓ap锛屾柟渚挎煡鎵�
+//            Map<String, String> paramValueMap = new HashMap<>();
+//            for (int i = 0; i < list.size(); i++) {
+//                paramValueMap.put(list.get(i).getParamCode(),
+//                    readWriteEntityList.get(i).getValue().toString());
+//            }
+//
+//            // 鎸夐『搴忕粰灞炴�ц祴鍊�
+//            for (Field field : fields) {
+//                field.setAccessible(true);
+//                String paramCode = field.getName(); // 鍋囪灞炴�у悕涓庡弬鏁扮紪鐮佷竴鑷�
+//                String value = paramValueMap.get(paramCode);
+//
+//                if (value != null) {
+//                    // 鏍规嵁瀛楁绫诲瀷杞崲鍊�
+//                    Object convertedValue = convertValue(value, field.getType());
+//                    field.set(stationObject, convertedValue);
+//                }
+//            }
+//
+//            return stationObject;
+//        } catch (Exception e) {
+//            log.error("鍒涘缓宸ヤ綅瀵硅薄澶辫触锛�" + device, e);
+//            return null;
+//        }
+//    }
+//
+//    /**
+//     * 鏍规嵁瀛楁绫诲瀷杞崲鍊�
+//     */
+//    private static Object convertValue(String value, Class<?> type) {
+//        if (type == String.class) {
+//            return value;
+//        } else if (type == Integer.class || type == int.class) {
+//            return Integer.parseInt(value);
+//        } else if (type == Double.class || type == double.class) {
+//            return Double.parseDouble(value);
+//        } else if (type == Float.class || type == float.class) {
+//            return Float.parseFloat(value);
+//        } else if (type == Long.class || type == long.class) {
+//            return Long.parseLong(value);
+//        } else if (type == Boolean.class || type == boolean.class) {
+//            return Boolean.parseBoolean(value);
+//        } else if (type == Date.class) {
+//            try {
+//                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//                return sdf.parse(value);
+//            } catch (ParseException e) {
+//                return null;
+//            }
+//        }
+//        return value;
+//    }
+//
+//}
diff --git a/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscriptionTemp.java b/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscriptionTemp.java
index 1a5b98f..51adbee 100644
--- a/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscriptionTemp.java
+++ b/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscriptionTemp.java
@@ -1,166 +1,166 @@
-package com.billion.main.plc.sub;
-
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.billion.main.da.domain.DaParamCollection;
-import com.billion.main.da.service.IDaParamCollectionService;
-import com.billion.main.da.service.IDaStationCollectionService;
-import com.billion.main.plc.constant.Constants;
-import com.billion.main.sc.domain.ScCollectionParamConf;
-import com.billion.main.sc.service.IScCollectionParamConfService;
-import com.kangaroohy.milo.model.ReadWriteEntity;
-import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
-import com.kangaroohy.milo.service.MiloService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.stream.Collectors;
-
-
-@Slf4j
-public class OPCUaSubscriptionTemp implements SubscriptionCallback {
-
-    public static MiloService miloService;
-    public static IScCollectionParamConfService collectionParamConfService;
-    public static IDaParamCollectionService paramCollectionService;
-    public static IDaStationCollectionService stationCollectionService;
-
-    public OPCUaSubscriptionTemp(MiloService miloService, IScCollectionParamConfService collectionParamConfService
-            , IDaParamCollectionService paramCollectionService, IDaStationCollectionService stationCollectionService) {
-        OPCUaSubscriptionTemp.miloService = miloService;
-        OPCUaSubscriptionTemp.collectionParamConfService = collectionParamConfService;
-        OPCUaSubscriptionTemp.paramCollectionService = paramCollectionService;
-        OPCUaSubscriptionTemp.stationCollectionService = stationCollectionService;
-    }
-
-    @Override
-    public void onSubscribe(String identifier, Object value) {
-        log.info("鍦板潃锛�"+identifier+"鍊硷細"+value);
-        try {
-            if(null != value && !Constants.ZERO.equals(value.toString())) {
-                String[] nodes = identifier.split("[.]");
-                String thoroughfare = nodes[0];//閫氶亾
-                String device = nodes[1];//璁惧
-                String tab = nodes[2];//鏍囪
-                String valueString = value.toString();//鍦板潃鍊�
-
-                CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> {
-                    subHandle(thoroughfare,device,tab,valueString);
-                });
-
-            }
-        } catch (Exception e) {
-            log.error(e.getMessage());
-        }
-    }
-
-    public void subHandle(String thoroughfare,String device,String tab,String valueString){
-        try{
-            //鐩戝惉recordData
-            if(tab.equals(Constants.RECORD_DATA)){
-                //濡傛灉鏄�1鍋氳繘绔欏鐞�
-                if(valueString.equals(Constants.ONE)){
-                    Object sfcCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".sfcCode").getValue();
-                    if(ObjectUtil.isNotNull(sfcCodeObject)){
-                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_ONE_ONE).build());
-                    }else {
-                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_ONE_TWO).build());
-                    }
-                //濡傛灉鏄�2鍋氬嚭绔欏鐞嗗鐞�
-                }else if(valueString.equals(Constants.TWO)){
-                    String result = Constants.STRING_TWO_ONE;
-                    //璇诲彉閫熺鎬绘垚鐮�
-                    Object sfcCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".sfcCode").getValue();
-                    //涓虹┖鏃讹紝杩斿洖5
-                    if (ObjectUtil.isNull(sfcCodeObject)){
-                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_TWO_FIVE).build());
-                    }else {
-                        String snCode = sfcCodeObject.toString().trim();//浜у搧SN
-                        Object stationStatusObjcet = miloService.readFromOpcUa(thoroughfare + "." + device + ".StationStatus").getValue();//绔欑姸鎬佸湴鍧�
-                        String stationStatus = stationStatusObjcet.toString();
-                        if (ObjectUtil.isNotNull(stationStatusObjcet)) {
-                            //淇濆瓨鍙傛暟锛屽彂閫佸伐鍘侻ES
-                            result = saveParamCollection(device, snCode, stationStatus);
-                            //淇濆瓨杩囩珯璁板綍
-                            savePassingStation(device,snCode,stationStatus);
-                        }else {
-                            result = Constants.STRING_TWO_THREE;
-                            log.info("璇诲彇鍒板伐浣峽}StationStatus鏁版嵁锛歿},杩斿洖RecordDataDone鐨勫�间负{}", device, "IS NULL锛�", result);
-                        }
-                    }
-                    miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build());
-                }
-            }
-        }catch (Exception e) {
-            log.error(e.getMessage());
-        }
-    }
-
-    /**
-     * 淇濆瓨杩囩珯鏁版嵁
-     *
-     * @param device       宸ヤ綅
-     * @param snCode       浜у搧搴忓垪鍙�
-     * @return Integer
-     * @throws Exception e
-     */
-    private static Integer savePassingStation(String device, String snCode,String stationStatus){
-        Integer result = 21;
-        try {
-
-
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-        return result;
-    }
-
-    /**
-     * 淇濆瓨鍙傛暟鏁版嵁鍜屽彂閫佸伐鍘侻ES
-     * @param device 宸ヤ綅
-     * @param snCode 浜у搧SN
-     * @param stationStatus 绔欑姸鎬�
-     * @return result
-     * @throws Exception e
-     */
-    private static String saveParamCollection(String device,String snCode,String stationStatus){
-        String result = Constants.STRING_TWO_ONE;//杩斿洖缁撴灉
-        try {
-            //鏌ヨ鍙傛暟閰嶇疆琛�
-            List<ScCollectionParamConf> list = collectionParamConfService.list(new LambdaQueryWrapper<ScCollectionParamConf>()
-                    .eq(ScCollectionParamConf::getLocationCode, device)//宸ヤ綅
-                    .eq(ScCollectionParamConf::getSubscribe, Constants.ONE)//鏄惁閲囬泦
-            );
-            if (CollUtil.isNotEmpty(list)){
-                List<String> collect = list.stream()
-                        .map(ScCollectionParamConf::getNode).collect(Collectors.toList());
-                List<ReadWriteEntity> readWriteEntityList = miloService.readFromOpcUa(collect);
-                ArrayList<DaParamCollection> collectionList = new ArrayList<>();
-                for (int i = 0; i < readWriteEntityList.size(); i++) {
-                    DaParamCollection daParamCollection = new DaParamCollection();
-                    daParamCollection.setSfcCode(snCode);
-                    daParamCollection.setLocationCode(device);
-                    daParamCollection.setParamCode(list.get(i).getParamCode());//鍙傛暟缂栫爜
-                    daParamCollection.setParamName(list.get(i).getParamName());//鍙傛暟鍚嶇О
-                    daParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString());
-                    daParamCollection.setCollectTime(new Date());
-                    collectionList.add(daParamCollection);
-                }
-                paramCollectionService.saveBatch(collectionList);
-            }
-
-        }catch (Exception e) {
-            throw new RuntimeException("淇濆瓨鏁版嵁鍙戦�佸伐鍘侻ES寮傚父");
-        }
-        return result;
-    }
-
-
-}
+//package com.billion.main.plc.sub;
+//
+//
+//import cn.hutool.core.collection.CollUtil;
+//import cn.hutool.core.util.ObjectUtil;
+//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+//import com.billion.main.da.domain.DaParamCollection;
+//import com.billion.main.da.service.IDaParamCollectionService;
+//import com.billion.main.da.service.IDaStationCollectionService;
+//import com.billion.main.plc.constant.Constants;
+//import com.billion.main.sc.domain.ScCollectionParamConf;
+//import com.billion.main.sc.service.IScCollectionParamConfService;
+//import com.kangaroohy.milo.model.ReadWriteEntity;
+//import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
+//import com.kangaroohy.milo.service.MiloService;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.ArrayList;
+//import java.util.Date;
+//import java.util.List;
+//import java.util.concurrent.CompletableFuture;
+//import java.util.stream.Collectors;
+//
+//
+//@Slf4j
+//public class OPCUaSubscriptionTemp implements SubscriptionCallback {
+//
+//    public static MiloService miloService;
+//    public static IScCollectionParamConfService collectionParamConfService;
+//    public static IDaParamCollectionService paramCollectionService;
+//    public static IDaStationCollectionService stationCollectionService;
+//
+//    public OPCUaSubscriptionTemp(MiloService miloService, IScCollectionParamConfService collectionParamConfService
+//            , IDaParamCollectionService paramCollectionService, IDaStationCollectionService stationCollectionService) {
+//        OPCUaSubscriptionTemp.miloService = miloService;
+//        OPCUaSubscriptionTemp.collectionParamConfService = collectionParamConfService;
+//        OPCUaSubscriptionTemp.paramCollectionService = paramCollectionService;
+//        OPCUaSubscriptionTemp.stationCollectionService = stationCollectionService;
+//    }
+//
+//    @Override
+//    public void onSubscribe(String identifier, Object value) {
+//        log.info("鍦板潃锛�"+identifier+"鍊硷細"+value);
+//        try {
+//            if(null != value && !Constants.ZERO.equals(value.toString())) {
+//                String[] nodes = identifier.split("[.]");
+//                String thoroughfare = nodes[0];//閫氶亾
+//                String device = nodes[1];//璁惧
+//                String tab = nodes[2];//鏍囪
+//                String valueString = value.toString();//鍦板潃鍊�
+//
+//                CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> {
+//                    subHandle(thoroughfare,device,tab,valueString);
+//                });
+//
+//            }
+//        } catch (Exception e) {
+//            log.error(e.getMessage());
+//        }
+//    }
+//
+//    public void subHandle(String thoroughfare,String device,String tab,String valueString){
+//        try{
+//            //鐩戝惉recordData
+//            if(tab.equals(Constants.RECORD_DATA)){
+//                //濡傛灉鏄�1鍋氳繘绔欏鐞�
+//                if(valueString.equals(Constants.ONE)){
+//                    Object sfcCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".sfcCode").getValue();
+//                    if(ObjectUtil.isNotNull(sfcCodeObject)){
+//                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_ONE_ONE).build());
+//                    }else {
+//                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_ONE_TWO).build());
+//                    }
+//                //濡傛灉鏄�2鍋氬嚭绔欏鐞嗗鐞�
+//                }else if(valueString.equals(Constants.TWO)){
+//                    String result = Constants.STRING_TWO_ONE;
+//                    //璇诲彉閫熺鎬绘垚鐮�
+//                    Object sfcCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".sfcCode").getValue();
+//                    //涓虹┖鏃讹紝杩斿洖5
+//                    if (ObjectUtil.isNull(sfcCodeObject)){
+//                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.STRING_TWO_FIVE).build());
+//                    }else {
+//                        String snCode = sfcCodeObject.toString().trim();//浜у搧SN
+//                        Object stationStatusObjcet = miloService.readFromOpcUa(thoroughfare + "." + device + ".StationStatus").getValue();//绔欑姸鎬佸湴鍧�
+//                        String stationStatus = stationStatusObjcet.toString();
+//                        if (ObjectUtil.isNotNull(stationStatusObjcet)) {
+//                            //淇濆瓨鍙傛暟锛屽彂閫佸伐鍘侻ES
+//                            result = saveParamCollection(device, snCode, stationStatus);
+//                            //淇濆瓨杩囩珯璁板綍
+//                            savePassingStation(device,snCode,stationStatus);
+//                        }else {
+//                            result = Constants.STRING_TWO_THREE;
+//                            log.info("璇诲彇鍒板伐浣峽}StationStatus鏁版嵁锛歿},杩斿洖RecordDataDone鐨勫�间负{}", device, "IS NULL锛�", result);
+//                        }
+//                    }
+//                    miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build());
+//                }
+//            }
+//        }catch (Exception e) {
+//            log.error(e.getMessage());
+//        }
+//    }
+//
+//    /**
+//     * 淇濆瓨杩囩珯鏁版嵁
+//     *
+//     * @param device       宸ヤ綅
+//     * @param snCode       浜у搧搴忓垪鍙�
+//     * @return Integer
+//     * @throws Exception e
+//     */
+//    private static Integer savePassingStation(String device, String snCode,String stationStatus){
+//        Integer result = 21;
+//        try {
+//
+//
+//        } catch (Exception e) {
+//            throw new RuntimeException(e);
+//        }
+//
+//        return result;
+//    }
+//
+//    /**
+//     * 淇濆瓨鍙傛暟鏁版嵁鍜屽彂閫佸伐鍘侻ES
+//     * @param device 宸ヤ綅
+//     * @param snCode 浜у搧SN
+//     * @param stationStatus 绔欑姸鎬�
+//     * @return result
+//     * @throws Exception e
+//     */
+//    private static String saveParamCollection(String device,String snCode,String stationStatus){
+//        String result = Constants.STRING_TWO_ONE;//杩斿洖缁撴灉
+//        try {
+//            //鏌ヨ鍙傛暟閰嶇疆琛�
+//            List<ScCollectionParamConf> list = collectionParamConfService.list(new LambdaQueryWrapper<ScCollectionParamConf>()
+//                    .eq(ScCollectionParamConf::getLocationCode, device)//宸ヤ綅
+//                    .eq(ScCollectionParamConf::getSubscribe, Constants.ONE)//鏄惁閲囬泦
+//            );
+//            if (CollUtil.isNotEmpty(list)){
+//                List<String> collect = list.stream()
+//                        .map(ScCollectionParamConf::getNode).collect(Collectors.toList());
+//                List<ReadWriteEntity> readWriteEntityList = miloService.readFromOpcUa(collect);
+//                ArrayList<DaParamCollection> collectionList = new ArrayList<>();
+//                for (int i = 0; i < readWriteEntityList.size(); i++) {
+//                    DaParamCollection daParamCollection = new DaParamCollection();
+//                    daParamCollection.setSfcCode(snCode);
+//                    daParamCollection.setLocationCode(device);
+//                    daParamCollection.setParamCode(list.get(i).getParamCode());//鍙傛暟缂栫爜
+//                    daParamCollection.setParamName(list.get(i).getParamName());//鍙傛暟鍚嶇О
+//                    daParamCollection.setParamValue(readWriteEntityList.get(i).getValue().toString());
+//                    daParamCollection.setCollectTime(new Date());
+//                    collectionList.add(daParamCollection);
+//                }
+//                paramCollectionService.saveBatch(collectionList);
+//            }
+//
+//        }catch (Exception e) {
+//            throw new RuntimeException("淇濆瓨鏁版嵁鍙戦�佸伐鍘侻ES寮傚父");
+//        }
+//        return result;
+//    }
+//
+//
+//}
diff --git a/billion-quartz/pom.xml b/billion-quartz/pom.xml
index 8204f14..825e1a7 100644
--- a/billion-quartz/pom.xml
+++ b/billion-quartz/pom.xml
@@ -34,6 +34,10 @@
             <groupId>com.billion</groupId>
             <artifactId>billion-common</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.billion</groupId>
+            <artifactId>billion-main</artifactId>
+        </dependency>
 
     </dependencies>
 
diff --git a/billion-quartz/src/main/java/com/billion/quartz/task/RyTask.java b/billion-quartz/src/main/java/com/billion/quartz/task/RyTask.java
index 8884a4f..b3fcf87 100644
--- a/billion-quartz/src/main/java/com/billion/quartz/task/RyTask.java
+++ b/billion-quartz/src/main/java/com/billion/quartz/task/RyTask.java
@@ -1,7 +1,10 @@
 package com.billion.quartz.task;
 
+
 import org.springframework.stereotype.Component;
 import com.billion.common.utils.StringUtils;
+
+import javax.annotation.Resource;
 
 /**
  * 瀹氭椂浠诲姟璋冨害娴嬭瘯
@@ -11,6 +14,10 @@
 @Component("ryTask")
 public class RyTask
 {
+
+//    @Resource
+//    private TcpClient tcpClient;
+
     public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
     {
         System.out.println(StringUtils.format("鎵ц澶氬弬鏂规硶锛� 瀛楃涓茬被鍨媨}锛屽竷灏旂被鍨媨}锛岄暱鏁村瀷{}锛屾诞鐐瑰瀷{}锛屾暣褰}", s, b, l, d, i));
@@ -24,5 +31,6 @@
     public void ryNoParams()
     {
         System.out.println("鎵ц鏃犲弬鏂规硶");
+//        tcpClient.receiveData();
     }
 }
diff --git a/billion-quartz/src/main/java/com/billion/quartz/util/AbstractQuartzJob.java b/billion-quartz/src/main/java/com/billion/quartz/util/AbstractQuartzJob.java
index fe86481..3ae41c5 100644
--- a/billion-quartz/src/main/java/com/billion/quartz/util/AbstractQuartzJob.java
+++ b/billion-quartz/src/main/java/com/billion/quartz/util/AbstractQuartzJob.java
@@ -93,7 +93,7 @@
         }
 
         // 鍐欏叆鏁版嵁搴撳綋涓�
-        SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog);
+//        SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog);
     }
 
     /**
diff --git a/billion-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml b/billion-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
index 25336d6..ae31ec7 100644
--- a/billion-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
+++ b/billion-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
@@ -87,7 +87,7 @@
  			<if test="jobMessage != null and jobMessage != ''">#{jobMessage},</if>
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="exceptionInfo != null and exceptionInfo != ''">#{exceptionInfo},</if>
- 			sysdate()
+		GETDATE()
  		)
 	</insert>
 
diff --git a/billion-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml b/billion-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
index 590c335..d7f0a5c 100644
--- a/billion-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
+++ b/billion-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
@@ -75,7 +75,7 @@
  			<if test="status !=null">status = #{status},</if>
  			<if test="remark != null and remark != ''">remark = #{remark},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
- 			update_time = sysdate()
+ 			update_time = GETDATE()
  		</set>
  		where job_id = #{jobId}
 	</update>
@@ -104,7 +104,7 @@
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
- 			sysdate()
+		    GETDATE()
  		)
 	</insert>
 
diff --git a/billion-ui/src/api/main/da/stationCollection.js b/billion-ui/src/api/main/da/stationCollection.js
index ab5cad2..559c191 100644
--- a/billion-ui/src/api/main/da/stationCollection.js
+++ b/billion-ui/src/api/main/da/stationCollection.js
@@ -8,7 +8,14 @@
     params: query
   })
 }
-
+export function printList(query) {
+  return request({
+    url: '/da/stationCollection/printList',
+    method: 'get',
+    params: query
+  })
+}
+printList
 // 鏌ヨ杩囩珯閲囬泦璇︾粏
 export function getStationCollection(id) {
   return request({
@@ -42,3 +49,19 @@
     method: 'delete'
   })
 }
+
+export function crave(param) {
+  return request({
+    url: '/da/stationCollection/crave',
+    method: 'get',
+    params: param
+  })
+}
+
+export function reCrave(param) {
+  return request({
+    url: '/da/stationCollection/reCrave',
+    method: 'get',
+    params: param
+  })
+}
diff --git a/billion-ui/src/assets/logo/logo.png b/billion-ui/src/assets/logo/logo.png
index e263760..93ac3d5 100644
--- a/billion-ui/src/assets/logo/logo.png
+++ b/billion-ui/src/assets/logo/logo.png
Binary files differ
diff --git a/billion-ui/src/assets/logo/logo2.png b/billion-ui/src/assets/logo/logo2.png
new file mode 100644
index 0000000..e263760
--- /dev/null
+++ b/billion-ui/src/assets/logo/logo2.png
Binary files differ
diff --git a/billion-ui/src/router/index.js b/billion-ui/src/router/index.js
index f849ea2..75197ca 100644
--- a/billion-ui/src/router/index.js
+++ b/billion-ui/src/router/index.js
@@ -89,18 +89,18 @@
     ]
   },
   // 鏍锋満鏍囩鎵撳嵃璺敱
-  {
-    path: '/main/bq',
-    component: Layout,
-    children: [
-      {
-        path: 'prototypeLabelPrinting',
-        component: () => import('@/views/main/bq/prototypeLabelPrinting'),
-        name: 'PrototypeLabelPrinting',
-        meta: { title: '鏍锋満鏍囩鎵撳嵃', icon: 'printer' }
-      }
-    ]
-  },
+  // {
+  //   path: '/main/bq',
+  //   component: Layout,
+  //   children: [
+  //     {
+  //       path: 'prototypeLabelPrinting',
+  //       component: () => import('@/views/main/bq/prototypeLabelPrinting'),
+  //       name: 'PrototypeLabelPrinting',
+  //       meta: { title: '鏍锋満鏍囩鎵撳嵃', icon: 'printer' }
+  //     }
+  //   ]
+  // },
   // 鍖归厤鎵�鏈夎矾寰�
   {
     path: '*',
diff --git a/billion-ui/src/views/index.vue b/billion-ui/src/views/index.vue
index 8081a92..be35c65 100644
--- a/billion-ui/src/views/index.vue
+++ b/billion-ui/src/views/index.vue
@@ -1,1037 +1,157 @@
 <template>
   <div class="app-container home">
-    <el-row :gutter="20">
-      <el-col :sm="24" :lg="24">
-        <blockquote class="text-warning" style="font-size: 14px">
-          棰嗗彇闃块噷浜戦�氱敤浜戜骇鍝�1888浼樻儬鍒�
-          <br />
-          <el-link
-            href="https://www.aliyun.com/minisite/goods?userCode=brki8iof"
-            type="primary"
-            target="_blank"
-            >https://www.aliyun.com/minisite/goods?userCode=brki8iof</el-link
-          >
-          <br />
-          棰嗗彇鑵捐浜戦�氱敤浜戜骇鍝�2860浼樻儬鍒�
-          <br />
-          <el-link
-            href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console"
-            type="primary"
-            target="_blank"
-            >https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</el-link
-          >
-          <br />
-          闃块噷浜戞湇鍔″櫒鎶樻墸鍖�
-          <el-link href="http://aly.ruoyi.vip" type="primary" target="_blank"
-            >>鈽涒槢鐐规垜杩涘叆鈽氣槡</el-link
-          >
-          &nbsp;&nbsp;&nbsp; 鑵捐浜戞湇鍔″櫒绉掓潃鍖�
-          <el-link href="http://txy.ruoyi.vip" type="primary" target="_blank"
-            >>鈽涒槢鐐规垜杩涘叆鈽氣槡</el-link
-          ><br />
-          <h4 class="text-danger">
-            浜戜骇鍝侀�氱敤绾㈠寘锛屽彲鍙犲姞瀹樼綉甯歌浼樻儬浣跨敤銆�(浠呴檺鏂扮敤鎴�)
-          </h4>
-        </blockquote>
-
-        <hr />
+    <el-row>
+      <el-col :span="24">
+        <div class="grid-content bg-purple-dark"
+             style="font-size: 50px; font-weight: bolder; align-content: center">
+          <div style="width:100%; margin-left: 300px">
+            <span style="text-align: center">寰风帥鏅烘帶-绠变綋鍒荤爜</span>
+          </div>
+        </div>
       </el-col>
     </el-row>
-    <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"
-            size="mini"
-            icon="el-icon-cloudy"
-            plain
-            @click="goTarget('https://gitee.com/y_project/RuoYi-Vue')"
-            >璁块棶鐮佷簯</el-button
-          >
-          <el-button
-            size="mini"
-            icon="el-icon-s-home"
-            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 :gutter="20" style="margin-top: 50px">
+      <el-input
+        class="myinput"
+        placeholder="璇疯緭鍏ュ簭鍒楀彿"
+        v-model="sfcCode"
+        clearable
+        style="width: 60%; height: 50px; font-size: 34px">
+      </el-input>
+      <el-button type="primary" style=" margin-left: 20px; width: 12%; height: 50px; font-size: 28px; " @click="carveMethod()">纭</el-button>
+      <el-button type="success" style=" margin-left: 20px; width: 12%; height: 50px; font-size: 28px;" @click="flushMethod()">鍒锋柊</el-button>
     </el-row>
     <el-divider />
     <el-row :gutter="20">
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <div slot="header" class="clearfix">
-            <span>鑱旂郴淇℃伅</span>
-          </div>
-          <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> <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=SUc-msaypcqB2UTFif4eqGlBHkKcvMNP&authKey=JdQBouY2PG%2BS%2BCzAfIgbCGNgxyahpfh24IW%2F03rPxGilhqVbisLma%2FFFnt79DHNh&noverify=0&group_code=151450850" target="_blank">151450850</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">
-          <div slot="header" class="clearfix">
-            <span>鏇存柊鏃ュ織</span>
-          </div>
-          <el-collapse accordion>
-            <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">
-          <div slot="header" class="clearfix">
-            <span>鎹愯禒鏀寔</span>
-          </div>
-          <div class="body">
-            <img
-              src="@/assets/images/pay.png"
-              alt="donate"
-              width="100%"
-            />
-            <span style="display: inline-block; height: 30px; line-height: 30px"
-              >浣犲彲浠ヨ浣滆�呭枬鏉挅鍟¤〃绀洪紦鍔�</span
-            >
-          </div>
-        </el-card>
-      </el-col>
     </el-row>
+
+    <div>
+      <el-table
+        :data="tableData"
+        border
+        style="width: 750px; font-size: x-large; font-weight: bolder">
+        <el-table-column
+          class="fontHead"
+          fixed
+          prop="sfcCode"
+          label="绛夊緟鎵撴爣淇℃伅"
+          width="550"
+          >
+        </el-table-column>
+
+        <el-table-column
+          fixed="right"
+          label="鎿嶄綔"
+          width="200"
+          >
+          <template slot-scope="scope">
+            <el-button @click="deleteRow(scope.row)" type="text" size="small">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
   </div>
+
 </template>
 
 <script>
+import {crave, reCrave, printList, delStationCollection} from "../api/main/da/stationCollection";
+
 export default {
   name: "Index",
   data() {
     return {
       // 鐗堟湰鍙�
-      version: "3.8.8"
+      version: "3.8.8",
+      sfcCode: '',
+      tableData: [],
     };
   },
   methods: {
-    goTarget(href) {
-      window.open(href, "_blank");
-    }
+
+    //鍏充簬姝ら〉闈㈣繕闇�瑕侀獙璇侊紝
+    //濡傛灉鎵撴爣杞欢鑳藉鎵ц涓ゆ潯sql璇彞锛岀浜屾潯sql璇彞涓鸿揪鏍囧畬鎴愮殑鏍囪瘑淇敼,姝ゆ椂椤甸潰鍙樉绀哄鏉″緟鎵撴爣鏁版嵁锛屾鏃跺彲浠ユ湁鍒犻櫎鎸夐挳
+    //濡傛灉涓嶆敮鎸佸鏉ql璇彞锛屼笉闇�瑕佸垹闄ゆ搷浣滐紝閫昏緫涓鸿緭鍏ヤ竴鏉℃墦涓�鏉�
+    deleteRow(row){
+      delStationCollection(row.id).then(res => {
+        console.log("res",res)
+        this.flushMethod()
+      })
+    },
+    open() {
+      this.$confirm('姝ゅ簭鍒楀彿宸插埢鐮侊紝鏄惁闇�瑕侀噸鏂板埢鐮�?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        console.log('111111')
+        reCrave({sfcCode:this.sfcCode}).then(res => {
+          console.log('res',res)
+          this.flushMethod()
+        })
+        this.$message({
+          type: 'success',
+          message: '纭閲嶆柊鍒荤爜!'
+        });
+      }).catch(() => {
+        console.log('222222')
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑�'
+        });
+      });
+    },
+    carveMethod(){
+      crave({sfcCode:this.sfcCode}).then(res => {
+        console.log('res',res)
+        if (res.code === 200) {
+          if (res.data === 200){
+            this.$message({
+              message: '鍒荤爜淇℃伅鍙戦�佹垚鍔�',
+              type: 'success'
+            });
+            this.flushMethod()
+          } else if (res.data === 303){
+            this.open()
+          }
+        }
+      })
+    },
+    flushMethod(){
+      printList().then(res => {
+        console.log(res)
+        if (res.code === 200){
+          this.tableData = res.data
+        } else {
+          this.$message({
+            message: '鏌ヨ澶辫触锛岃鑱旂郴绠$悊鍛�',
+            type: 'info'
+          });
+        }
+
+      })
+    },
+
+
+  },
+  mounted(){
+    this.interval = setInterval(() => {
+      this.flushMethod()
+    }, 3000);
+  },
+  beforeDestroy() {
+    clearInterval(this.interval); // 娓呴櫎瀹氭椂鍣紝闃叉鍐呭瓨娉勬紡
   }
 };
 </script>
 
 <style scoped lang="scss">
+::v-deep .el-input__inner{
+  height: 50px;
+}
+//::v-deep .el-table--border .el-table__cell:first-child .cell{
+//  font-size: x-large;
+//}
 .home {
   blockquote {
     padding: 10px 20px;
diff --git a/billion-ui/src/views/login.vue b/billion-ui/src/views/login.vue
index 8758305..56f92e2 100644
--- a/billion-ui/src/views/login.vue
+++ b/billion-ui/src/views/login.vue
@@ -72,8 +72,8 @@
     return {
       codeUrl: "",
       loginForm: {
-        username: "admin",
-        password: "admin123",
+        username: "",
+        password: "",
         rememberMe: false,
         code: "",
         uuid: ""

--
Gitblit v1.9.3