Commit f80e3a62 by huangqy

同步下本地版本

parent b993e9e5
<template>
<div>
<el-tabs type="card" style="height: 50vh">
<el-tab-pane label="系统配置">
<el-card>
<el-form :model="sysForm" :inline="true">
<el-form-item label="仓库编号">
<el-input v-model="sysForm.storeCode" />
</el-form-item>
<el-form-item label="服务器">
<el-input v-model="sysForm.serverIp" />
</el-form-item>
<el-form-item label="端口">
<el-input v-model="sysForm.serverPort" />
</el-form-item>
<el-form-item label="是否切换">
<el-checkbox v-model="sysForm.isHide" />
</el-form-item>
<el-form-item>
<el-button type="success" @click="getConfig">刷新</el-button>
<el-button type="primary" @click="saveConfig">保存</el-button>
<el-button type="primary" @click="syncGoods">同步物资</el-button>
</el-form-item>
</el-form>
</el-card>
</el-tab-pane>
<el-tab-pane label="通道配置">
<el-card>
<div class="head-container">
<el-button class="filter-item" type="primary" style="float: right" @click="add">新增</el-button>
</div>
<el-table :data="channelList" border style="width: 100%;">
<el-table-column prop="stationId" label="通道号" align="center" width="100"/>
<el-table-column prop="readerIp" label="读写器" align="center">
<template #default="scope">
{{scope.row.readerIp + ':' + scope.row.readerPort }}
</template>
</el-table-column>
<el-table-column prop="gpioIp" label="GPIO" align="center">
<template #default="scope">
{{scope.row.gpioIp + ':' + scope.row.gpioPort }}
</template>
</el-table-column>
<el-table-column prop="ledIp" label="显示器" align="center">
<template #default="scope">
{{scope.row.ledIp + ':' + scope.row.ledPort }}
</template>
</el-table-column>
<el-table-column label="操作" width="200" align="center">
<template #default="scope">
<el-button type="primary" size="small" @click="edit(scope.row)">编辑</el-button>
<el-popconfirm title="你确定删除吗?" @confirm="removeDevice(scope.row)">
<template #reference>
<el-button type="danger" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</el-card>
</el-tab-pane>
</el-tabs>
<el-dialog v-model="innerVisible" width="30%" :title="title">
<el-form label-position="right" size="large" label-width="90px" :model="formData">
<el-form-item label="通道号">
<el-input v-model="formData.stationId" />
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="读写器IP">
<el-input v-model="formData.readerIp"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="读写器端口">
<el-input v-model="formData.readerPort"/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="读写器类型">
<el-select v-model="formData.readerType" style="width: 100%;">
<el-option :value="4" label="索利得四通道"></el-option>
<el-option :value="8" label="索利得八通道"></el-option>
</el-select>
</el-form-item>
<el-form-item label="天线功率">
<el-input v-model="formData.readerPower"/>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="GPIO的IP">
<el-input v-model="formData.gpioIp"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="GPIO端口">
<el-input v-model="formData.gpioPort"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="显示屏IP">
<el-input v-model="formData.ledIp"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="显示屏端口">
<el-input v-model="formData.ledPort"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="innerVisible = false">关闭</el-button>
<el-button type="primary" @click="handleSubmit">提交</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script>
import { defineComponent, ref, getCurrentInstance, toRefs, reactive } from 'vue'
import { postAction, getAction } from '@/api/manage'
import { ElMessage } from 'element-plus'
export default defineComponent({
setup() {
const channelList = ref([])
const title = ref('')
const sysForm = ref({})
const formData = ref({})
const innerVisible = ref(false)
const state = reactive({
url: {
getConfig: '/config/getConfig',
getDevice: '/device/getDevice',
updateDevice: '/device/updateDevice',
removeDevice: '/device/removeDevice',
saveDevice: '/device/saveDevice',
updateConfig: '/config/updateConfig',
saveConfig: '/config/saveConfig',
syncGoods: '/platform/syncGoods'
},
});
const loadData = (arg) => {
getConfig()
getDevice()
}
function getDevice() {
postAction(state.url.getDevice, {storeCode: JSON.parse(sessionStorage.getItem('storeInfo')).storeCode}).then(res => {
if (res.code !== 99200) return ElMessage.error(res.message);
channelList.value = res.data
})
}
function getConfig() {
postAction(state.url.getConfig, {}).then(res => {
if (res.code !== 99200) return ElMessage.error(res.message);
sysForm.value = {
id: res.data[0].id,
storeCode: res.data[0].storeCode,
serverIp: res.data[0].serverIp,
serverPort: res.data[0].serverPort
}
})
}
function syncGoods() {
getAction(state.url.syncGoods).then(res => {
if (res.code !== 99200) return ElMessage.error(res.message);
ElMessage.success(res.message)
})
}
function saveConfig() {
let url = sysForm.value.id ? state.url.updateConfig : state.url.saveConfig
postAction(url, sysForm.value).then(res => {
if (res.code !== 99200) return ElMessage.error(res.message);
ElMessage.success(res.message)
sessionStorage.setItem('storeInfo', JSON.stringify(sysForm.value))
})
}
function edit(row) {
title.value = '编辑通道'
formData.value = JSON.parse(JSON.stringify(row))
innerVisible.value = true
}
function add() {
title.value = '新增通道'
innerVisible.value = true
}
function handleSubmit() {
let url = formData.value.id ? state.url.updateDevice : state.url.saveDevice
formData.value.storeCode = JSON.parse(sessionStorage.getItem('storeInfo')).storeCode
postAction(url, formData.value).then(res => {
if (res.code !== 99200) return ElMessage.error(res.message);
ElMessage.success(res.message)
formData.value = {}
innerVisible.value = false
getDevice()
})
}
function removeDevice(row) {
postAction(state.url.removeDevice, {stationId: row.stationId, id: row.id}).then(res => {
if (res.code !== 99200) return ElMessage.error(res.message);
ElMessage.success(res.message)
getDevice()
})
}
return {
...toRefs(state),
sysForm,
formData,
innerVisible,
title,
channelList,
getConfig,
saveConfig,
add,
edit,
handleSubmit,
removeDevice,
loadData,
getDevice,
syncGoods
}
},
})
</script>
\ No newline at end of file
......@@ -7,7 +7,7 @@
<span>{{item.title}}</span>
</span>
</template>
<component :is="item.template" :ref="item.template"></component>
<component :is="item.template" :ref="item.template" @refresh="handleRefresh"></component>
</el-tab-pane>
</el-tabs>
</template>
......@@ -19,8 +19,9 @@ import InTask from './InTask.vue'
import OutTask from './OutTask.vue'
import Query from './Query.vue'
import Setting from './Setting.vue'
import ChannelSetting from './ChannelSetting.vue'
export default defineComponent({
components: { RFID, InTask, OutTask, Query, Setting },
components: { RFID, InTask, OutTask, Query, Setting, ChannelSetting },
setup() {
const { proxy } = getCurrentInstance()
const tabPosition = ref('bottom')
......@@ -30,14 +31,20 @@ export default defineComponent({
{title: '出库作业', icon: 'iconfont icon-chukuguanli-', template: 'OutTask'},
{title: '手动设置', icon: 'iconfont icon-shezhi', template: 'Setting'},
{title: '查询', icon: 'iconfont icon-chaxun', template: 'Query'},
{title: '通道配置', icon: 'iconfont icon-shezhi', template: 'ChannelSetting'},
]
function tabChange(index) {
proxy.$refs[tabList[index].template][0].loadData()
}
function handleRefresh() {
proxy.$refs.InTask[0].loadData()
proxy.$refs.OutTask[0].loadData()
}
return {
tabPosition,
tabList,
tabChange
tabChange,
handleRefresh
}
},
})
......
......@@ -29,7 +29,7 @@
<el-table-column label="操作" width="200" align="center">
<template #default="scope">
<el-button type="success" size="small" @click="activateBill(scope.row)" v-if="scope.row.activeState == 0" :disabled="lockState">激活</el-button>
<el-button type="warning" size="small" @click="deactivate(scope.row)" v-if="scope.row.activeState == 1">取消</el-button>
<el-button type="warning" size="small" @click="deactivate(scope.row)" v-if="scope.row.activeState == 1">解除</el-button>
<el-button type="primary" size="small" :disabled="scope.row.activeState !== 2" @click="reportBill(scope.row)">上报</el-button>
</template>
</el-table-column>
......@@ -73,7 +73,7 @@
</template>
<el-table :data="modelList" border style="width: 100%;height: 78vh;">
<el-table-column type="index" label="序号" width="60" align="center"/>
<el-table-column prop="modelName" label="号型名称" align="center"/>
<el-table-column prop="modelName" label="号型名称" align="center" width="180"/>
<el-table-column prop="planAmount" label="计划数量" align="center"/>
<el-table-column prop="realAmount" label="实际数量" align="center"/>
<el-table-column prop="writeAmount" label="手动修改数量" align="center">
......@@ -282,7 +282,7 @@ export default defineComponent({
})
}
// 取消激活
// 解除激活
function deactivate(row) {
row.activeState = 0
postAction(state.url.activateBill, row).then(res => {
......
......@@ -29,7 +29,7 @@
<el-table-column label="操作" width="200" align="center">
<template #default="scope">
<el-button type="success" size="small" @click="activateBill(scope.row)" v-if="scope.row.activeState == 0" :disabled="lockState">激活</el-button>
<el-button type="warning" size="small" @click="deactivate(scope.row)" v-if="scope.row.activeState == 1">取消</el-button>
<el-button type="warning" size="small" @click="deactivate(scope.row)" v-if="scope.row.activeState == 1">解除</el-button>
<el-button type="primary" size="small" :disabled="scope.row.activeState !== 2" @click="reportBill(scope.row)">上报</el-button>
</template>
</el-table-column>
......@@ -73,7 +73,7 @@
</template>
<el-table :data="modelList" border style="width: 100%;height: 78vh;">
<el-table-column type="index" label="序号" width="60" align="center"/>
<el-table-column prop="modelName" label="号型名称" align="center"/>
<el-table-column prop="modelName" label="号型名称" align="center" width="180"/>
<el-table-column prop="planAmount" label="计划数量" align="center"/>
<el-table-column prop="realAmount" label="实际数量" align="center"/>
<el-table-column prop="writeAmount" label="手动修改数量" align="center">
......@@ -282,7 +282,7 @@ export default defineComponent({
})
}
// 取消激活
// 解除激活
function deactivate(row) {
row.activeState = 0
postAction(state.url.activateBill, row).then(res => {
......
<template>
<div>
<el-tabs type="border-card">
<el-tab-pane v-for="item in channelList" :key="item" :label="'通道' + item.stationId">
<el-tab-pane v-for="item in channelList" :key="item" :label="'通道' + item.stationId">
<el-card>
<template #header>
<template #header>
<div class="card-header">
<span>实时出入库数据</span>
<span>实时出入库数据</span>
</div>
</template>
<div class="head-container">
<el-button type="primary" class="filter-item" style="float: right" @click="channelSetting">通道配置</el-button>
</div>
<el-table :data="goodsData" border style="width: 100%;" max-height="850">
<el-table-column type="index" label="序号" width="60" />
<el-table-column prop="name" label="品名" width="180" />
<el-table-column prop="sizename" label="Address" />
</el-table>
</template>
<el-row :gutter="20">
<el-col :span="18">
<el-table :data="item.logData" size="large" border style="width: 100%;" max-height="720">
<el-table-column type="index" label="序号" width="70" align="center"/>
<el-table-column prop="stationType" label="作业类型" align="center">
<template #default="scope">
{{ scope.row.stationType == 'IN' ? '入库' : '出库' }}
</template>
</el-table-column>
<el-table-column prop="goodsCode" label="代码" align="center"/>
<el-table-column prop="goodsName" label="品名" align="center"/>
<el-table-column prop="modelName" label="号型" align="center"/>
<el-table-column prop="amount" label="箱内数量" align="center"/>
<el-table-column prop="xhNo" label="箱号" align="center"/>
</el-table>
</el-col>
<el-col :span="6">
<el-card class="box-card">
<template #header>
<div style="text-align: center;">
<span>识别总箱数</span>
</div>
</template>
<div class="text">{{ item.logData.length }}箱</div>
</el-card>
<el-divider />
<el-card class="box-card">
<template #header>
<div style="text-align: center;">
<span>异常次数</span>
</div>
</template>
<div class="text">{{ item.errNum }}次</div>
</el-card>
</el-col>
</el-row>
</el-card>
</el-tab-pane>
</el-tabs>
<el-dialog v-model="dialogVisible" title="射频识别系统">
<el-tabs type="card">
<el-tab-pane label="系统配置">
<el-card>
<el-form :model="sysForm" :inline="true">
<el-form-item label="仓库编号">
<el-input v-model="sysForm.storeCode" />
</el-form-item>
<el-form-item label="服务器">
<el-input v-model="sysForm.serverIp" />
</el-form-item>
<el-form-item label="端口">
<el-input v-model="sysForm.serverPort" />
</el-form-item>
<el-form-item label="是否隐藏">
<el-checkbox v-model="sysForm.isHide" />
</el-form-item>
<el-form-item>
<el-button type="success" @click="getConfig">读取</el-button>
<el-button type="primary" @click="saveConfig">保存</el-button>
</el-form-item>
</el-form>
</el-card>
</el-tab-pane>
<el-tab-pane label="通道配置">
</el-tab-pane>
</el-tab-pane>
</el-tabs>
</el-dialog>
</div>
</template>
<script>
import { defineComponent, ref, reactive, toRefs } from 'vue'
import { ElMessage } from 'element-plus'
import { postAction } from '@/api/manage'
import { postAction, getAction } from '@/api/manage'
export default defineComponent({
setup() {
setup(props, {emit}) {
const channelList = ref([]);
const goodsData = ref([])
const sysForm = ref({})
const dialogVisible = ref(false)
const logData = ref([])
const title = ref('')
const state = reactive({
url: {
getConfig: '/config/getConfig',
getDevice: '/device/getDevice',
openReader: '/rfid/openReader',
updateDevice: '/device/updateDevice',
removeDevice: '/device/removeDevice',
saveDevice: '/device/saveDevice',
updateConfig: '/config/updateConfig'
},
storeInfo: {},
storeCode: '',
lockReconnect: false
});
// websocket开始
let websock = null
function initWebSocket () {
......@@ -87,7 +92,22 @@ export default defineComponent({
};
// Websoket接收消息事件
const websocketOnmessage = (res) => {
console.log(res.data);
let message = JSON.parse(res.data)
if (message.noticeType == 2) {
let stationType = message.stationType
let noticeInfoList = JSON.parse(message.noticeInfo)
let newArr = noticeInfoList.map(v=>{
return {...v, stationType: stationType}
})
let channel = channelList.value.find(i => i.stationId == message.stationId)
channel.logData = [...channel.logData, ...newArr]
emit('refresh')
}
if (![0,2,3].includes(message.noticeType)) {
let channel = channelList.value.find(i => i.stationId == message.stationId)
channel.errNum = channel.errNum + 1
}
};
// Websoket连接错误事件
const websocketOnerror = (res) => {
......@@ -112,10 +132,25 @@ export default defineComponent({
const loadData = () => {
if (sessionStorage.getItem('storeInfo')) {
let config = JSON.parse(sessionStorage.getItem('storeInfo'))
sysForm.value = {
id: config.id,
storeCode: config.storeCode,
serverIp: config.serverIp,
serverPort: config.serverPort,
isHide: config.isHide
}
channelList.value = []
postAction(state.url.getDevice, {storeCode: JSON.parse(sessionStorage.getItem('storeInfo')).storeCode}).then(res => {
if (res.code !== 99200) return ElMessage.error(res.message);
channelList.value = res.data
res.data.map((item, index) => {
channelList.value.push(Object.assign({}, item, { logData: [], errNum: 0 }))
})
initWebSocket()
getAction(state.url.openReader, {storeCode: JSON.parse(sessionStorage.getItem('storeInfo')).storeCode}).then(res => {
})
})
} else {
postAction(state.url.getConfig, {}).then(res => {
......@@ -126,6 +161,8 @@ export default defineComponent({
}
}
function getConfig() {
postAction(state.url.getConfig, {}).then(res => {
if (res.code !== 99200) return ElMessage.error(res.message);
......@@ -150,13 +187,15 @@ export default defineComponent({
dialogVisible.value = true
}
loadData()
return {
...toRefs(state),
channelList,
dialogVisible,
goodsData,
sysForm,
channelList,
logData,
title,
loadData,
channelSetting,
getConfig,
......@@ -171,7 +210,10 @@ export default defineComponent({
.el-tabs--border-card >.el-tabs__content {
padding: 0px !important;
}
.text {
text-align: center;
font-size: 40px;
}
.head-container {
padding-bottom: 10px;
.filter-item {
......
......@@ -111,10 +111,12 @@ export default defineComponent({
}
const loadSelect = () => {
postAction(state.url.getBillPage, {pageNo: 1, pageSize: 50, type: 'IN', storeCode: JSON.parse(sessionStorage.getItem('storeInfo')).storeCode}).then(res => {
if (res.code !== 99200) return ElMessage.error(res.message);
billList.value = res.data.records
})
if (sessionStorage.getItem('storeInfo')) {
postAction(state.url.getBillPage, {pageNo: 1, pageSize: 50, type: 'IN', storeCode: JSON.parse(sessionStorage.getItem('storeInfo')).storeCode}).then(res => {
if (res.code !== 99200) return ElMessage.error(res.message);
billList.value = res.data.records
})
}
}
function changeStation(value) {
......@@ -154,6 +156,7 @@ export default defineComponent({
function changeModel(value) {
if (value) {
formData.value.modelName = modelList.value.find(i => i.modelCode == formData.value.modelCode).modelName
formData.value.skuCode = modelList.value.find(i => i.modelCode == formData.value.modelCode).skuCode
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论