diff --git a/src/api/link/protocol.ts b/src/api/link/protocol.ts
new file mode 100644
index 00000000..e1a88586
--- /dev/null
+++ b/src/api/link/protocol.ts
@@ -0,0 +1,10 @@
+import server from '@/utils/request';
+
+export const detail = (id: string) => server.get(`/gateway/device/${id}`);
+
+export const save = (data: Object) => server.post(`/gateway/device`, data);
+
+export const list = (data: Object) =>
+ server.post(`/protocol/_query`, data);
+
+export const remove = (id: string) => server.remove(`/gateway/device/${id}`);
diff --git a/src/views/link/Protocol/Save/index.vue b/src/views/link/Protocol/Save/index.vue
new file mode 100644
index 00000000..9a60a0be
--- /dev/null
+++ b/src/views/link/Protocol/Save/index.vue
@@ -0,0 +1,37 @@
+
+
+ 123
+
+
+
+
+
diff --git a/src/views/link/Protocol/index.vue b/src/views/link/Protocol/index.vue
new file mode 100644
index 00000000..8798fe9c
--- /dev/null
+++ b/src/views/link/Protocol/index.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+ {{ slotProps.name }}
+
+
+
+
+ ID
+
+
+
+ {{
+ slotProps.id
+ }}
+ {{ slotProps.id }}
+
+
+
+
+
+ 类型
+
+
+
+ {{
+ slotProps.type
+ }}
+ {{ slotProps.type }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/link/Protocol/typings.d.ts b/src/views/link/Protocol/typings.d.ts
new file mode 100644
index 00000000..91ac930a
--- /dev/null
+++ b/src/views/link/Protocol/typings.d.ts
@@ -0,0 +1,7 @@
+import type { BaseItem } from '@/utils/typings';
+
+type ProtocolItem = {
+ state: number;
+ type: string;
+ configuration: Record;
+} & BaseItem;