|
|
@@ -2,11 +2,35 @@
|
|
|
<div class="review-page">
|
|
|
<section class="hero-card">
|
|
|
<div class="hero-copy">
|
|
|
- <h2 class="title">
|
|
|
- 轮询设备消息
|
|
|
- </h2>
|
|
|
+ <h2 class="title">轮询设备消息</h2>
|
|
|
+ </div>
|
|
|
+ <div style="display: block">
|
|
|
+ <span class="field-label">场景码</span>
|
|
|
+ <el-input
|
|
|
+ v-model.trim="sceneNum"
|
|
|
+ placeholder="请输入 sceneNum"
|
|
|
+ clearable
|
|
|
+ style="margin-top: 5px"
|
|
|
+ />
|
|
|
+ <div class="toolbar" style="margin-top: 10px">
|
|
|
+ <el-button
|
|
|
+ class="action-btn"
|
|
|
+ type="primary"
|
|
|
+ plain
|
|
|
+ @click="handleStartRecord"
|
|
|
+ >
|
|
|
+ 开始记录
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ class="action-btn"
|
|
|
+ type="danger"
|
|
|
+ plain
|
|
|
+ @click="handleEndRecord"
|
|
|
+ >
|
|
|
+ 结束记录
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
-
|
|
|
<div class="toolbar">
|
|
|
<el-tag
|
|
|
:type="isPolling ? 'success' : 'info'"
|
|
|
@@ -61,33 +85,25 @@
|
|
|
<h3>消息列表</h3>
|
|
|
</div>
|
|
|
|
|
|
- <div
|
|
|
- v-if="messages.length"
|
|
|
- class="record-list"
|
|
|
- >
|
|
|
+ <div v-if="messages.length" class="record-list">
|
|
|
<article
|
|
|
v-for="(message, index) in messages"
|
|
|
:key="message.id"
|
|
|
class="record-card"
|
|
|
>
|
|
|
- <p class="record-order">
|
|
|
- 第 {{ index + 1 }} 条
|
|
|
- </p>
|
|
|
- <pre class="record-payload">{{ message.payloadText }}</pre>
|
|
|
+ <p class="record-order">第 {{ index + 1 }} 条</p>
|
|
|
+ <pre class="record-payload"><code>{{ message.codeText }}</code></pre>
|
|
|
</article>
|
|
|
</div>
|
|
|
|
|
|
- <el-empty
|
|
|
- v-else
|
|
|
- description="点击开启轮询后显示消息"
|
|
|
- />
|
|
|
+ <el-empty v-else description="点击开启轮询后显示消息" />
|
|
|
</section>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { ElMessage } from "element-plus";
|
|
|
-import { getDebugMessages } from "@/api.js";
|
|
|
+import { ElMessage, ElMessageBox } from "element-plus";
|
|
|
+import { getNewDebugMessages, newStartReport, newStopReport } from "@/api.js";
|
|
|
|
|
|
const POLLING_INTERVAL = 500;
|
|
|
|
|
|
@@ -102,6 +118,7 @@ export default {
|
|
|
pollTimer: null,
|
|
|
errorText: "",
|
|
|
sequence: 0,
|
|
|
+ sceneNum: "SG-t-rQ14yS9VjVp",
|
|
|
};
|
|
|
},
|
|
|
beforeUnmount() {
|
|
|
@@ -122,7 +139,7 @@ export default {
|
|
|
this.isRequesting = true;
|
|
|
|
|
|
try {
|
|
|
- const response = await getDebugMessages(currentDeviceId);
|
|
|
+ const response = await getNewDebugMessages(currentDeviceId);
|
|
|
const normalizedMessages = this.normalizeMessages(response);
|
|
|
this.messages = normalizedMessages;
|
|
|
this.errorText = "";
|
|
|
@@ -153,6 +170,79 @@ export default {
|
|
|
this.isPolling = false;
|
|
|
this.isRequesting = false;
|
|
|
},
|
|
|
+ async handleStartRecord() {
|
|
|
+ const currentDeviceId = this.deviceId || "sn123";
|
|
|
+ const currentSceneNum = this.sceneNum || "SG-t-rQ14yS9VjVp";
|
|
|
+
|
|
|
+ if (!currentDeviceId) {
|
|
|
+ ElMessage({
|
|
|
+ message: "请输入 deviceId",
|
|
|
+ type: "warning",
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!currentSceneNum) {
|
|
|
+ ElMessage({
|
|
|
+ message: "请输入 sceneNum",
|
|
|
+ type: "warning",
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ const response = await newStartReport({
|
|
|
+ deviceId: currentDeviceId,
|
|
|
+ sceneCode: currentSceneNum,
|
|
|
+ });
|
|
|
+
|
|
|
+ this.errorText = "";
|
|
|
+ ElMessage({
|
|
|
+ message: "开始记录成功",
|
|
|
+ type: "success",
|
|
|
+ });
|
|
|
+ } catch (err) {
|
|
|
+ this.errorText = err?.message || err || "开始记录失败";
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async handleEndRecord() {
|
|
|
+ const currentDeviceId = this.deviceId || "sn123";
|
|
|
+ const currentSceneNum = this.sceneNum || "SG-t-rQ14yS9VjVp";
|
|
|
+
|
|
|
+ if (!currentDeviceId) {
|
|
|
+ ElMessage({
|
|
|
+ message: "请输入 deviceId",
|
|
|
+ type: "warning",
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!currentSceneNum) {
|
|
|
+ ElMessage({
|
|
|
+ message: "请输入 sceneNum",
|
|
|
+ type: "warning",
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ const response = await newStopReport({
|
|
|
+ deviceId: currentDeviceId,
|
|
|
+ sceneCode: currentSceneNum,
|
|
|
+ });
|
|
|
+
|
|
|
+ this.errorText = "";
|
|
|
+
|
|
|
+ if (response?.data) {
|
|
|
+ ElMessage({
|
|
|
+ message: "结束记录成功",
|
|
|
+ type: "info",
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ this.errorText = err?.message || err || "结束记录失败";
|
|
|
+ }
|
|
|
+ },
|
|
|
handleStartPolling() {
|
|
|
if (!this.deviceId) {
|
|
|
ElMessage({
|
|
|
@@ -180,15 +270,51 @@ export default {
|
|
|
|
|
|
return list.map((item) => {
|
|
|
this.sequence += 1;
|
|
|
- const payload = item?.payload;
|
|
|
+ const source = this.pickMessageSource(item);
|
|
|
+ const uuidText = this.toDisplayText(source?.uuid || item?.uuid);
|
|
|
|
|
|
return {
|
|
|
- id: `${this.sequence}-${Date.now()}`,
|
|
|
- payloadText: this.formatPayload(payload),
|
|
|
+ id:
|
|
|
+ item?.id ||
|
|
|
+ item?._id ||
|
|
|
+ `${this.sequence}-${
|
|
|
+ source?.sessionId || source?.createTime || Date.now()
|
|
|
+ }`,
|
|
|
+ uuid: uuidText,
|
|
|
+ deviceId: this.toDisplayText(source?.deviceId),
|
|
|
+ epc: this.toDisplayText(source?.epc),
|
|
|
+ sessionId: this.toDisplayText(source?.sessionId),
|
|
|
+ createTime: this.toDisplayText(source?.createTime),
|
|
|
+ floor: this.toDisplayText(source?.floor),
|
|
|
+ name: this.toDisplayText(source?.name),
|
|
|
+ codeText: this.formatMessageCode(source, uuidText),
|
|
|
};
|
|
|
});
|
|
|
},
|
|
|
+ pickMessageSource(item) {
|
|
|
+ if (item?.payload && typeof item.payload === "object") {
|
|
|
+ return item.payload;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (item?.data && typeof item.data === "object") {
|
|
|
+ return item.data;
|
|
|
+ }
|
|
|
+
|
|
|
+ return item || {};
|
|
|
+ },
|
|
|
pickMessageList(response) {
|
|
|
+ if (Array.isArray(response?.messages)) {
|
|
|
+ return response.messages;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Array.isArray(response?.list)) {
|
|
|
+ return response.list;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Array.isArray(response?.records)) {
|
|
|
+ return response.records;
|
|
|
+ }
|
|
|
+
|
|
|
if (Array.isArray(response?.ataMessages)) {
|
|
|
return response.ataMessages;
|
|
|
}
|
|
|
@@ -197,6 +323,10 @@ export default {
|
|
|
return response.dataMessages;
|
|
|
}
|
|
|
|
|
|
+ if (Array.isArray(response?.data)) {
|
|
|
+ return response.data;
|
|
|
+ }
|
|
|
+
|
|
|
if (response?.data && Array.isArray(response.data.ataMessages)) {
|
|
|
return response.data.ataMessages;
|
|
|
}
|
|
|
@@ -205,6 +335,22 @@ export default {
|
|
|
return response.data.dataMessages;
|
|
|
}
|
|
|
|
|
|
+ if (response?.data && Array.isArray(response.data.messages)) {
|
|
|
+ return response.data.messages;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (response?.data && Array.isArray(response.data.list)) {
|
|
|
+ return response.data.list;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (response?.data && Array.isArray(response.data.records)) {
|
|
|
+ return response.data.records;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Array.isArray(response?.data?.data)) {
|
|
|
+ return response.data.data;
|
|
|
+ }
|
|
|
+
|
|
|
if (
|
|
|
response?.data?.data &&
|
|
|
Array.isArray(response.data.data.ataMessages)
|
|
|
@@ -219,22 +365,45 @@ export default {
|
|
|
return response.data.data.dataMessages;
|
|
|
}
|
|
|
|
|
|
+ if (response?.data?.data && Array.isArray(response.data.data.messages)) {
|
|
|
+ return response.data.data.messages;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (response?.data?.data && Array.isArray(response.data.data.list)) {
|
|
|
+ return response.data.data.list;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (response?.data?.data && Array.isArray(response.data.data.records)) {
|
|
|
+ return response.data.data.records;
|
|
|
+ }
|
|
|
+
|
|
|
if (Array.isArray(response)) {
|
|
|
return response;
|
|
|
}
|
|
|
|
|
|
return [];
|
|
|
},
|
|
|
- formatPayload(payload) {
|
|
|
- if (typeof payload === "string") {
|
|
|
- return payload;
|
|
|
+ toDisplayText(value) {
|
|
|
+ if (value === undefined || value === null || value === "") {
|
|
|
+ return "-";
|
|
|
}
|
|
|
|
|
|
- if (payload === undefined) {
|
|
|
- return "";
|
|
|
+ if (typeof value === "object") {
|
|
|
+ return JSON.stringify(value);
|
|
|
}
|
|
|
|
|
|
- return JSON.stringify(payload, null, 2);
|
|
|
+ return String(value);
|
|
|
+ },
|
|
|
+ formatMessageCode(source, uuidText) {
|
|
|
+ return [
|
|
|
+ `uuid: ${uuidText}`,
|
|
|
+ `deviceId: ${this.toDisplayText(source?.deviceId)}`,
|
|
|
+ `epc: ${this.toDisplayText(source?.epc)}`,
|
|
|
+ `sessionId: ${this.toDisplayText(source?.sessionId)}`,
|
|
|
+ `createTime: ${this.toDisplayText(source?.createTime)}`,
|
|
|
+ `floor: ${this.toDisplayText(source?.floor)}`,
|
|
|
+ `name: ${this.toDisplayText(source?.name)}`,
|
|
|
+ ].join("\n");
|
|
|
},
|
|
|
},
|
|
|
};
|
|
|
@@ -389,6 +558,10 @@ export default {
|
|
|
line-height: 1.6;
|
|
|
}
|
|
|
|
|
|
+.record-payload code {
|
|
|
+ font-family: Consolas, "Courier New", monospace;
|
|
|
+}
|
|
|
+
|
|
|
@media (max-width: 767px) {
|
|
|
.review-page {
|
|
|
padding: 12px 10px calc(18px + env(safe-area-inset-bottom));
|