Vue.component("watch-rgv-card", { template: `
RGV监控
{{ entry.label }}
{{ entry.value }}
当前没有可展示的RGV数据
`, props: { param: { type: Object, default: function () { return {}; } }, items: { type: Array, default: null }, autoRefresh: { type: Boolean, default: true }, readOnly: { type: Boolean, default: false } }, data: function () { return { rgvList: [], activeNames: "", searchRgvNo: "", showControl: false, controlParam: { rgvNo: "", sourcePos: "", targetPos: "" }, pageSize: 12, currentPage: 1, timer: null }; }, computed: { sourceList: function () { return Array.isArray(this.items) ? this.items : this.rgvList; }, filteredRgvList: function () { var keyword = String(this.searchRgvNo || "").trim(); if (!keyword) { return this.sourceList; } return this.sourceList.filter(function (item) { return String(item.rgvNo) === keyword; }); }, displayRgvList: function () { var start = (this.currentPage - 1) * this.pageSize; return this.filteredRgvList.slice(start, start + this.pageSize); }, totalPages: function () { return Math.max(1, Math.ceil(this.filteredRgvList.length / this.pageSize) || 1); } }, watch: { items: function () { this.afterDataRefresh(); }, param: { deep: true, immediate: true, handler: function (newVal) { if (newVal && newVal.rgvNo && newVal.rgvNo !== 0) { this.focusRgv(newVal.rgvNo); } } } }, created: function () { MonitorCardKit.ensureStyles(); if (this.autoRefresh) { this.timer = setInterval(this.getRgvStateInfo, 1000); } }, beforeDestroy: function () { if (this.timer) { clearInterval(this.timer); this.timer = null; } }, methods: { orDash: function (value) { return MonitorCardKit.orDash(value); }, getStatusLabel: function (item) { return MonitorCardKit.deviceStatusLabel(item && item.deviceStatus); }, getStatusTone: function (item) { return MonitorCardKit.statusTone(this.getStatusLabel(item)); }, isActive: function (rgvNo) { return String(this.activeNames) === String(rgvNo); }, toggleItem: function (item) { var next = String(item.rgvNo); this.activeNames = this.activeNames === next ? "" : next; }, focusRgv: function (rgvNo) { this.searchRgvNo = String(rgvNo); var index = this.filteredRgvList.findIndex(function (item) { return String(item.rgvNo) === String(rgvNo); }); this.currentPage = index >= 0 ? Math.floor(index / this.pageSize) + 1 : 1; this.activeNames = String(rgvNo); }, afterDataRefresh: function () { if (this.currentPage > this.totalPages) { this.currentPage = this.totalPages; } if (this.activeNames) { var exists = this.filteredRgvList.some(function (item) { return String(item.rgvNo) === String(this.activeNames); }, this); if (!exists) { this.activeNames = ""; } } }, handlePageChange: function (page) { if (page < 1 || page > this.totalPages) { return; } this.currentPage = page; }, getRgvStateInfo: function () { if (this.$root && this.$root.sendWs) { this.$root.sendWs(JSON.stringify({ url: "/rgv/table/rgv/state", data: {} })); } }, setRgvList: function (res) { if (res && res.code === 200) { this.rgvList = res.data || []; this.afterDataRefresh(); } }, openControl: function () { this.showControl = !this.showControl; }, buildDetailEntries: function (item) { return [ { label: "编号", value: this.orDash(item.rgvNo) }, { label: "工作号", value: this.orDash(item.taskNo) }, { label: "模式", value: this.orDash(item.mode) }, { label: "状态", value: this.orDash(item.status) }, { label: "轨道位", value: this.orDash(item.trackSiteNo) }, { label: "是否有物", value: MonitorCardKit.yesNo(item.loading) }, { label: "故障代码", value: this.orDash(item.warnCode) }, { label: "故障描述", value: this.orDash(item.alarm) }, { label: "扩展数据", value: this.orDash(item.extend) } ]; }, postControl: function (url, payload) { $.ajax({ url: baseUrl + url, headers: { token: localStorage.getItem("token") }, contentType: "application/json", method: "post", data: JSON.stringify(payload), success: function (res) { if (res && res.code === 200) { MonitorCardKit.showMessage(this, res.msg || "操作成功", "success"); } else { MonitorCardKit.showMessage(this, (res && res.msg) || "操作失败", "warning"); } }.bind(this) }); }, controlCommandTransport: function () { this.postControl("/rgv/command/transport", this.controlParam); }, controlCommandMove: function () { this.postControl("/rgv/command/move", this.controlParam); }, controlCommandTaskComplete: function () { this.postControl("/rgv/command/taskComplete", this.controlParam); } } });