diff --git a/src/assets/icon_operation.svg b/src/assets/icon_operation.svg
new file mode 100644
index 0000000..8068d92
--- /dev/null
+++ b/src/assets/icon_operation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/services/txn.ts b/src/services/txn.ts
index cd315ce..ebfa268 100644
--- a/src/services/txn.ts
+++ b/src/services/txn.ts
@@ -59,3 +59,12 @@ export function getTxnRecord(txn: string, category: TxnRecord["category"]) {
}
return undefined;
}
+
+export function peekTxnRecord(txn: string, category: TxnRecord["category"]) {
+ const record = txnCmdMap[txn];
+ // 只有属于指定category时,才返回,且返回后删除记录,节约内存
+ if (record.category === category) {
+ return record;
+ }
+ return undefined;
+}
\ No newline at end of file
diff --git a/src/stores/status.ts b/src/stores/status.ts
index 525527a..8061618 100644
--- a/src/stores/status.ts
+++ b/src/stores/status.ts
@@ -2,6 +2,7 @@ import { ref, computed } from "vue";
import { defineStore } from "pinia";
import * as R from "ramda";
import type { StatusDatagram } from "@/services/socket";
+import { BehaviorSubject, Subject } from "rxjs";
export const useStatusStore = defineStore("status", () => {
const status = ref();
@@ -14,3 +15,12 @@ export const useStatusStore = defineStore("status", () => {
return { status, setStatus };
});
+
+// 进行中状态
+export type OnGoingStatus = "idle" | "doorOpening" | "doorClosing" | "shaking" | "injecting" | "movingToAct" | "movingToHeat";
+
+const onGoingStatusSub = new BehaviorSubject('idle');
+export const onGoingStatusOb = onGoingStatusSub.asObservable();
+export function setOnGoingStatus(status: OnGoingStatus) {
+ onGoingStatusSub.next(status)
+}
\ No newline at end of file
diff --git a/src/views/components/Footer.vue b/src/views/components/Footer.vue
index bc8013c..3caa6ce 100644
--- a/src/views/components/Footer.vue
+++ b/src/views/components/Footer.vue
@@ -1,16 +1,24 @@