diff --git a/0003-Solving-the-query-problem-of-leaving-the-page-polling-interface.patch b/0003-Solving-the-query-problem-of-leaving-the-page-polling-interface.patch
new file mode 100644
index 0000000..5b5c41a
--- /dev/null
+++ b/0003-Solving-the-query-problem-of-leaving-the-page-polling-interface.patch
@@ -0,0 +1,155 @@
+From c8f6d03755791bea887cc915099344df1c16d19b Mon Sep 17 00:00:00 2001
+From: wkl505997900 <2313665567@qq.com>
+Date: Thu, 21 Sep 2023 14:33:45 +0800
+Subject: [PATCH] fix an polling issue
+
+---
+ src/views/leaks/HostLeakDetail.vue | 7 +++++++
+ src/views/leaks/LeakTaskDetail.vue | 21 +++++++++++++--------
+ src/views/leaks/LeakTaskList.vue | 7 +++++++
+ src/views/leaks/components/CvesTable.vue | 6 ------
+ src/views/leaks/components/HostTable.vue | 5 ++---
+ 5 files changed, 29 insertions(+), 17 deletions(-)
+
+diff --git a/src/views/leaks/HostLeakDetail.vue b/src/views/leaks/HostLeakDetail.vue
+index 477df57..3327f80 100644
+--- a/src/views/leaks/HostLeakDetail.vue
++++ b/src/views/leaks/HostLeakDetail.vue
+@@ -257,6 +257,13 @@ export default {
+ mounted: function () {
+ this.getDetail();
+ this.getScanStatue();
++ },
++ beforeDestroy() {
++ // 离开页面前,若当前存在轮询,清除轮询
++ if (this.getScanStatusTimeout) {
++ clearInterval(this.getScanStatusTimeout);
++ this.getScanStatusTimeout = null;
++ }
+ }
+ };
+
+diff --git a/src/views/leaks/LeakTaskDetail.vue b/src/views/leaks/LeakTaskDetail.vue
+index 28b7272..f4c84c6 100644
+--- a/src/views/leaks/LeakTaskDetail.vue
++++ b/src/views/leaks/LeakTaskDetail.vue
+@@ -285,6 +285,8 @@ export default {
+ expandedRowKeys: [],
+ rpmrecord: {},
+ propType: '',
++ // 轮询计时器
++ CveScanStatueTimeout: null,
+ progressUpdateCaller: null,
+ reportvisible: false,
+ runningCveIds: [],
+@@ -544,6 +546,7 @@ export default {
+ updateProgress(taskList) {
+ const _this = this;
+ this.progressLoading = true;
++ clearTimeout(this.progressUpdateCaller);
+ getTaskProgress({taskList})
+ .then(function (res) {
+ _this.detail.statuses = res.data.result && res.data.result[_this.taskId];
+@@ -628,6 +631,7 @@ export default {
+ updateCveProgress(taskId, cveList) {
+ const _this = this;
+ this.cveProgressIsLoading = true;
++ clearTimeout(this.CveScanStatueTimeout);
+ getCveProgressUnderCveTask({
+ taskId,
+ cveList
+@@ -637,7 +641,7 @@ export default {
+ _this.runningCveIds = _this.getRunningCve(res.data.result);
+ _this.reportvisible = _this.getReportVisible(res.data.result);
+ if (_this.runningCveIds.length > 0) {
+- setTimeout(function () {
++ _this.CveScanStatueTimeout = setTimeout(function () {
+ _this.updateCveProgress(taskId, cveList);
+ }, configs.taskProgressUpdateInterval);
+ } else {
+@@ -860,16 +864,17 @@ export default {
+ });
+ }
+ },
+- beforeRouteLeave(to, from, next) {
+- // 路由跳转前,清除轮询
+- if (this.progressUpdateCaller) {
++ mounted: function () {
++ this.getInitalData();
++ },
++ beforeDestroy() {
++ // 离开页面前,若当前存在轮询,清除轮询
++ if (this.progressUpdateCaller || this.CveScanStatueTimeout) {
+ clearInterval(this.progressUpdateCaller);
++ clearInterval(this.CveScanStatueTimeout);
+ this.progressUpdateCaller = null;
++ this.CveScanStatueTimeout = null;
+ }
+- next();
+- },
+- mounted: function () {
+- this.getInitalData();
+ }
+ };
+
+diff --git a/src/views/leaks/LeakTaskList.vue b/src/views/leaks/LeakTaskList.vue
+index 262fa42..df8869a 100644
+--- a/src/views/leaks/LeakTaskList.vue
++++ b/src/views/leaks/LeakTaskList.vue
+@@ -419,6 +419,13 @@ export default {
+ },
+ mounted: function () {
+ this.getTaskList();
++ },
++ beforeDestroy() {
++ // 离开页面前,若当前存在轮询,清除轮询
++ if (this.progressUpdateCaller) {
++ clearInterval(this.progressUpdateCaller);
++ this.progressUpdateCaller = null;
++ }
+ }
+ };
+
+diff --git a/src/views/leaks/components/CvesTable.vue b/src/views/leaks/components/CvesTable.vue
+index 47eed62..84e23fb 100644
+--- a/src/views/leaks/components/CvesTable.vue
++++ b/src/views/leaks/components/CvesTable.vue
+@@ -146,7 +146,6 @@
+ :row-key="innerrecord => fixed ? record.cve_id + innerrecord.installed_rpm : record.cve_id + innerrecord.available_rpm + innerrecord.installed_rpm"
+ :columns="fixed ? (standalone ? ainnerColumns : binnerColumns) : (standalone ? aloneinnerColumns : innerColumns)"
+ :data-source="record.rpms || []"
+- :locale="tablenodata"
+ :rowSelection="innerRowSelection"
+ :pagination="false">
+
{{ getFixedWay(fixed_way, innerrecord) }}
+@@ -491,11 +490,6 @@ export default {
+ },
+ data() {
+ return {
+- tablenodata: {emptyText: () => (
+- 暂无可修复的rpm包, 可能原因为:
+-
1. 界面未刷新
+-
2. 冷补丁修复kernel后界面未重启
+- )},
+ selectedRows: [], // 选中行的row
+ searchKey: '',
+ innerCveList: [],
+diff --git a/src/views/leaks/components/HostTable.vue b/src/views/leaks/components/HostTable.vue
+index 0302e0f..327a4a9 100644
+--- a/src/views/leaks/components/HostTable.vue
++++ b/src/views/leaks/components/HostTable.vue
+@@ -974,9 +974,8 @@ export default {
+ this.getRepoList();
+ }
+ },
+- beforeRouteLeave(to, from, next) {
+- next();
+- // 路由跳转前,清除轮询
++ beforeDestroy() {
++ // 离开页面前,若当前存在轮询,清除轮询
+ if (this.scanStatueAllTimeout) {
+ clearInterval(this.scanStatueAllTimeout);
+ this.scanStatueAllTimeout = null;
+--
+Gitee
+
diff --git a/0004-Solving-the-problem-of-cve-fix-params.patch b/0004-Solving-the-problem-of-cve-fix-params.patch
new file mode 100644
index 0000000..6de47a9
--- /dev/null
+++ b/0004-Solving-the-problem-of-cve-fix-params.patch
@@ -0,0 +1,25 @@
+From e85c02c4300dcea0b0546c1a18b83a1c99f617d9 Mon Sep 17 00:00:00 2001
+From: wkl505997900 <2313665567@qq.com>
+Date: Tue, 26 Sep 2023 10:27:14 +0800
+Subject: [PATCH] fix issue
+
+---
+ src/views/leaks/components/CvesTable.vue | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/views/leaks/components/CvesTable.vue b/src/views/leaks/components/CvesTable.vue
+index 84e23fb..24245d9 100644
+--- a/src/views/leaks/components/CvesTable.vue
++++ b/src/views/leaks/components/CvesTable.vue
+@@ -864,7 +864,7 @@ export default {
+ }
+ this.selectedRowsAll = getSelectedRow(this.selectedRowKeys, this.selectedRowsAll, this.standalone ? this.tableData : this.propData, 'cve_id');
+ } else {
+- const index = target.rpms.findIndex(item => item.installed_rpm === record.installed_rpm)
++ const index = target.rpms.findIndex(item => item.installed_rpm === record.installed_rpm && item.available_rpm === record.available_rpm)
+ target.rpms.splice(index, 1)
+ if (target.rpms.length === 0) {
+ const dindex = this.innerCveList.findIndex(it => it.cve_id === record.cve_id)
+--
+Gitee
+
diff --git a/0005-Add-login-key-to-asset-management-module.patch b/0005-Add-login-key-to-asset-management-module.patch
new file mode 100644
index 0000000..f147fc7
--- /dev/null
+++ b/0005-Add-login-key-to-asset-management-module.patch
@@ -0,0 +1,427 @@
+From c5a59c0e103a711ce5377a24554ac7c79e2fae54 Mon Sep 17 00:00:00 2001
+From: wkl505997900 <2313665567@qq.com>
+Date: Tue, 17 Oct 2023 16:59:32 +0800
+Subject: [PATCH] update code
+
+---
+ src/api/assest.js | 3 +-
+ src/api/leaks.js | 1 -
+ src/views/assests/HostEdition.vue | 41 ++++++++++++++--
+ src/views/assests/components/EditableCell.vue | 5 +-
+ src/views/assests/components/addMoreHost.vue | 25 ++++++++--
+ .../components/CreateRepairTaskDrawer.vue | 3 --
+ src/views/leaks/components/CvesTable.vue | 48 ++++---------------
+ src/views/leaks/components/HostTable.vue | 5 +-
+ vue.config.js | 14 +++---
+ 9 files changed, 81 insertions(+), 64 deletions(-)
+
+diff --git a/src/api/assest.js b/src/api/assest.js
+index af1b125..69b12e2 100644
+--- a/src/api/assest.js
++++ b/src/api/assest.js
+@@ -124,7 +124,8 @@ export function addHost(parameter) {
+ ssh_port: parameter.ssh_port,
+ management: parameter.management,
+ ssh_user: parameter.ssh_user,
+- password: parameter.password
++ password: parameter.password === undefined ? '' : parameter.password,
++ ssh_pkey: parameter.ssh_pkey === undefined ? '' : parameter.ssh_pkey
+ }
+ });
+ }
+diff --git a/src/api/leaks.js b/src/api/leaks.js
+index cd59dda..097d790 100644
+--- a/src/api/leaks.js
++++ b/src/api/leaks.js
+@@ -4,7 +4,6 @@
+
+ import request from '@/vendor/ant-design-pro/utils/request';
+ // import { getNotEmptyObjectOrNull } from '@/vendor/ant-design-pro/utils/util';
+-
+ const api = {
+ getCveOverview: '/vulnerability/cve/overview',
+ getCveList: '/vulnerability/cve/list/get',
+diff --git a/src/views/assests/HostEdition.vue b/src/views/assests/HostEdition.vue
+index db6a7ee..de6253e 100644
+--- a/src/views/assests/HostEdition.vue
++++ b/src/views/assests/HostEdition.vue
+@@ -93,13 +93,39 @@
+
+
+
+-
+-
++
++
++ 主机登录密码
++
++
++ 主机登录公钥
++
++
++
++
++
++ 主机登录密码
++
++ 主机登录公钥
++
++ id_rsa.pub
++
++
++
++
++
+
+
+ 取消
+@@ -133,10 +159,13 @@ import {PageHeaderWrapper} from '@ant-design-vue/pro-layout';
+ import AddHostGroupModal from './components/AddHostGroupModal';
+
+ import {hostGroupList, addHost, getHostDetail, editHost} from '@/api/assest';
++import DescriptionTips from '@/components/DescriptionTips';
++
+ export default {
+ components: {
+ PageHeaderWrapper,
+- AddHostGroupModal
++ AddHostGroupModal,
++ DescriptionTips
+ },
+ data() {
+ return {
+@@ -148,7 +177,8 @@ export default {
+ form: this.$form.createForm(this),
+ submitLoading: false,
+ PortRequired: false,
+- UserRequired: false
++ UserRequired: false,
++ identificaWay: 1 // 认证方式,
+ };
+ },
+ computed: {
+@@ -194,6 +224,9 @@ export default {
+ }
+ },
+ methods: {
++ onChange(e) {
++ this.identificaWay = e.target.value;
++ },
+ handleUserChange(value) {
+ if (this.pageType === 'edit') {
+ value.target.value === this.basicHostInfo.ssh_user ? this.UserRequired = false : this.UserRequired = true
+diff --git a/src/views/assests/components/EditableCell.vue b/src/views/assests/components/EditableCell.vue
+index 282ba8c..28f0f62 100644
+--- a/src/views/assests/components/EditableCell.vue
++++ b/src/views/assests/components/EditableCell.vue
+@@ -8,7 +8,7 @@
+