add:新增rfid读写器查询接口以及输送线驱动

This commit is contained in:
2025-08-29 17:41:54 +08:00
parent 9c8077751a
commit 8e3176795d
32 changed files with 2263 additions and 277 deletions

View File

@@ -0,0 +1,235 @@
<template>
<div class="app-container">
<!-- 工具栏 -->
<div class="head-container">
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="80px"
label-suffix=":"
>
<el-form-item label="监听端口">
<el-input
v-model="query.search"
clearable
style="width: 300px"
size="mini"
placeholder="请输入监听端口"
class="filter-item"
/>
</el-form-item>
<!-- 新增滑块开关 -->
<el-form-item label="设备监听">
<el-switch
v-model="rfidStatus"
active-color="#13ce66"
inactive-color="#ccc"
@change="open"
/>
</el-form-item>
<rrOperation />
</el-form>
<crudOperation :permission="permission" />
<!-- 表格 -->
<el-table
ref="table"
v-loading="crud.loading"
:data="crud.data"
size="mini"
style="width: 100%;"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column prop="device_code" label="设备编号" />
<el-table-column prop="ip" label="IP" />
<el-table-column prop="status" label="连接状态">
<template slot-scope="scope">
<span :style="{ color: scope.row.status === 1 ? '#13ce66' : '#ff4949' }">
{{ scope.row.status === 1 ? '已连接' : '未连接' }}
</span>
</template>
</el-table-column>
<el-table-column prop="start_time" label="开始连接时间" />
<el-table-column
prop="online_time"
label="在线时间"
:min-width="flexWidth('online_time', crud.data, '在线时间')"
/>
<el-table-column
prop="rfid"
label="当前rfid值"
:min-width="flexWidth('rfid', crud.data, '当前rfid值')"
/>
<!-- <el-table-column prop="is_used" label="是否启用 ">-->
<!-- <template slot-scope="scope">-->
<!-- <el-switch-->
<!-- v-model="scope.row.is_used"-->
<!-- active-color="#409EFF"-->
<!-- inactive-color="#F56C6C"-->
<!-- @change="changeEnabled(scope.row, scope.row.is_used)"-->
<!-- />-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column
v-permission="['admin', 'mdPbMeasureunit:edit', 'mdPbMeasureunit:del']"
fixed="right"
label="操作"
width="150px"
align="center"
>
<template slot-scope="scope">
<udOperation :data="scope.row" :permission="permission" />
</template>
</el-table-column>
</el-table>
<el-input
v-model="logText"
type="textarea"
:rows="15"
placeholder="设备运行日志..."
readonly
style="width: 100%; margin-top: 5px;"
/>
<!-- 分页 -->
<pagination />
</div>
</div>
</template>
<script>
import crudRfid from './vehicle_rfid'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
const defaultForm = {
id: null,
ip: null,
port: null,
device_code: null,
is_used: true,
online_time: null,
create_id: null,
create_name: null,
create_time: null,
update_id: null,
update_name: null,
update_time: null,
status: null,
start_time: null
}
export default {
dicts: ['is_used'],
name: 'VehicleRfid',
components: { pagination, crudOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
return CRUD({
title: '计量单位',
url: 'api/rfid',
optShow: {
add: true
},
idField: 'id',
sort: 'id,desc',
crudMethod: { ...crudRfid }
})
},
data() {
return {
intervalId: null,
permission: {},
rfidStatus: false, // 新增开关状态变量
logText: '', // 展示日志内容
logTextList: [], // 存储日志行数组最多10条
query: {
search: '8160' // 设置默认监听端口
}
}
},
mounted() {
// 读写器定时器
this.intervalId = setInterval(() => {
this.crud.toQuery()
this.updateLogFromResult()
}, 3000)
},
beforeDestroy() {
if (this.intervalId) {
clearInterval(this.intervalId)
}
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
return true
},
// updateLogFromResult() {
// const logList = this.crud.data.map(item => item.log).filter(log => !!log)
// if (logList.length === 0) return
// const newLog = logList.join('\n')
// //每次都添加日志
// this.logTextList.unshift(newLog) // 新日志放最前
// if (this.logTextList.length > 15) {
// this.logTextList.pop() // 最多保留10条
// }
// this.logText = this.logTextList.join('\n\n') // 更新展示内容
// },
updateLogFromResult() {
const s = this.crud.data
const logList = this.crud.data.map(item => item.log).filter(log => !!log)
if (logList.length === 0) {
return
}
const newLog = logList.join('\n')
// 判断最新日志是否和旧的重复,避免重复添加
if (!this.logTextList.includes(newLog)) {
this.logTextList.unshift(newLog) // 新日志放最前
if (this.logTextList.length > 15) {
this.logTextList.pop() // 最多保留10条
}
this.logText = this.logTextList.join('\n\n') // 更新展示内容
}
},
changeEnabled(data, val) {
this.$confirm('此操作将改变' + data.device_code + '状态, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
crudRfid.edit(data).then(() => {
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
}).catch(() => {
data.is_used = !val
})
}).catch(() => {
data.is_used = !val
})
},
open(val) {
debugger
const payload = {
port: this.query.search == null ? '8160' : this.query.search,
isOpen: val ? '1' : '0'
}
crudRfid.open(JSON.stringify(payload)).then(res => {
this.crud.toQuery()
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
}).catch(() => {
this.$message.error('操作失败')
this.rfidStatus = !val
})
}
}
}
</script>
<style scoped>
</style>