Commit a6b68aed by 杨子

feat: 新增RFID标签管理功能并优化相关模块

refactor(预警记录): 增加批量处理功能并优化物资选择交互
feat(盘点任务): 新增任务管理功能并优化详情展示
fix(物资选择): 修复物资选择对话框的交互问题
style(库存汇总): 优化表格展示和操作按钮布局
docs: 更新POSTEK打印相关文档和工具
parent 89b3f420
...@@ -42,3 +42,12 @@ export function delWmsAlertRecord(recordId) { ...@@ -42,3 +42,12 @@ export function delWmsAlertRecord(recordId) {
method: 'delete' method: 'delete'
}) })
} }
// 批量处理预警记录
export function batchEditWmsAlertRecord(data) {
return request({
url: '/ware/wmsAlertRecord/batchEditHandle',
method: 'post',
data: data
})
}
...@@ -54,7 +54,8 @@ export function generateAllInventoryPlan() { ...@@ -54,7 +54,8 @@ export function generateAllInventoryPlan() {
// 执行单个盘点计划 // 执行单个盘点计划
export function generateInventoryPlan(planId) { export function generateInventoryPlan(planId) {
return request({ return request({
url: '/ware/wmsInventoryTask/generateForPlan/' + planId, url: '/ware/wmsInventoryTask/generateForPlan',
method: 'get' method: 'get',
params: { planId: planId }
}) })
} }
...@@ -358,6 +358,9 @@ const exposeMethods = { ...@@ -358,6 +358,9 @@ const exposeMethods = {
getTreeselect getTreeselect
} }
// 初始化时加载物资分类树
getTreeselect()
defineExpose(exposeMethods) defineExpose(exposeMethods)
</script> </script>
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="success" icon="Plus" @click="handleAddTag">新增标签</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -49,12 +50,31 @@ ...@@ -49,12 +50,31 @@
<el-table-column label="标签编码" align="center" prop="tagCode" /> <el-table-column label="标签编码" align="center" prop="tagCode" />
<el-table-column label="EPC编码" align="center" prop="epcCode" /> <el-table-column label="EPC编码" align="center" prop="epcCode" />
<el-table-column label="TID编码" align="center" prop="tidCode" /> <el-table-column label="TID编码" align="center" prop="tidCode" />
<el-table-column label="标签类型" align="center" prop="tagType" /> <el-table-column label="标签类型" align="center" prop="tagType">
<template #default="scope">
<dict-tag :options="rfidtag_type" :value="scope.row.tagType" />
</template>
</el-table-column>
<el-table-column label="标签状态" align="center" prop="tagStatus"> <el-table-column label="标签状态" align="center" prop="tagStatus">
<template #default="scope"> <template #default="scope">
<dict-tag :options="is_used" :value="scope.row.tagStatus" /> <dict-tag :options="is_used" :value="scope.row.tagStatus" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="绑定时间" align="center" prop="bindTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.bindTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="解绑时间" align="center" prop="unbindTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.unbindTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="最后读取时间" align="center" prop="lastReadTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.lastReadTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
</el-table> </el-table>
<pagination <pagination
...@@ -72,14 +92,45 @@ ...@@ -72,14 +92,45 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 新增RFID标签对话框 -->
<el-dialog :title="addDialogTitle" v-model="addDialogVisible" width="500px" append-to-body>
<el-form ref="addTagFormRef" :model="addTagForm" :rules="addTagRules" label-width="80px">
<el-form-item label="标签编码" prop="tagCode">
<el-input v-model="addTagForm.tagCode" placeholder="请输入标签编码" />
</el-form-item>
<el-form-item label="EPC编码" prop="epcCode">
<el-input v-model="addTagForm.epcCode" placeholder="请输入EPC编码" />
</el-form-item>
<el-form-item label="TID编码" prop="tidCode">
<el-input v-model="addTagForm.tidCode" placeholder="请输入TID编码" />
</el-form-item>
<el-form-item label="标签类型" prop="tagType">
<el-select v-model="addTagForm.tagType" placeholder="请选择标签类型">
<el-option v-for="item in rfidtag_type" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="addTagForm.remark" type="textarea" placeholder="请输入备注信息" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitAddTagForm"> </el-button>
<el-button @click="cancelAddTag"> </el-button>
</div>
</template>
</el-dialog>
</template> </template>
<script setup name="RfidTagSelectDialog"> <script setup name="RfidTagSelectDialog">
import { ref, reactive, watch } from 'vue' import { ref, reactive, watch } from 'vue'
import { listWmsRfidTag } from "@/api/ware/wmsRfidTag" import { listWmsRfidTag, addWmsRfidTag } from "@/api/ware/wmsRfidTag"
import { parseTime } from "@/utils/ruoyi" import { ElMessage } from 'element-plus'
import { parseTime } from '@/utils/ruoyi'
const {proxy} = getCurrentInstance() const {proxy} = getCurrentInstance()
const { is_used } = proxy.useDict('is_used') const { is_used, rfidtag_type } = proxy.useDict('is_used', 'rfidtag_type')
const props = defineProps({ const props = defineProps({
visible: { visible: {
type: Boolean, type: Boolean,
...@@ -129,6 +180,30 @@ const rfidTagList = ref([]) ...@@ -129,6 +180,30 @@ const rfidTagList = ref([])
// 选中的数据 // 选中的数据
const selectionList = ref([]) const selectionList = ref([])
// 新增标签对话框
const addDialogVisible = ref(false)
const addDialogTitle = ref('新增RFID标签')
const addTagFormRef = ref(null)
// 新增标签表单数据
const addTagForm = reactive({
tagCode: '',
epcCode: '',
tidCode: '',
tagType: '',
remark: ''
})
// 新增标签表单验证规则
const addTagRules = reactive({
tagCode: [
{ required: true, message: '标签编码不能为空', trigger: 'blur' }
],
tagType: [
{ required: true, message: '标签类型不能为空', trigger: 'change' }
]
})
// 初始化 // 初始化
const init = () => { const init = () => {
selectionList.value = [] selectionList.value = []
...@@ -183,6 +258,58 @@ const handleCancel = () => { ...@@ -183,6 +258,58 @@ const handleCancel = () => {
dialogVisible.value = false dialogVisible.value = false
} }
// 打开新增标签对话框
const handleAddTag = () => {
resetAddTagForm()
addDialogVisible.value = true
addDialogTitle.value = '新增RFID标签'
}
// 重置新增标签表单
const resetAddTagForm = () => {
addTagForm.tagCode = ''
addTagForm.epcCode = ''
addTagForm.tidCode = ''
addTagForm.tagType = ''
addTagForm.remark = ''
if (addTagFormRef.value) {
addTagFormRef.value.resetFields()
}
}
// 取消新增标签
const cancelAddTag = () => {
addDialogVisible.value = false
resetAddTagForm()
}
// 提交新增标签表单
const submitAddTagForm = () => {
if (!addTagFormRef.value) return
addTagFormRef.value.validate(valid => {
if (valid) {
// 设置标签状态为未使用
const tagData = {
...addTagForm,
tagStatus: '0' // 0表示未使用
}
// 调用新增API
addWmsRfidTag(tagData).then(response => {
ElMessage.success('RFID标签新增成功')
addDialogVisible.value = false
// 刷新标签列表
handleQuery()
}).catch(error => {
ElMessage.error('RFID标签新增失败:' + error.message)
console.error('新增RFID标签失败:', error)
})
}
})
}
// 当对话框打开时初始化数据 // 当对话框打开时初始化数据
watch(() => dialogVisible.value, (newVal) => { watch(() => dialogVisible.value, (newVal) => {
if (newVal) { if (newVal) {
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
import { ref, reactive, toRefs, onMounted, watch } from 'vue' import { ref, reactive, toRefs, onMounted, watch } from 'vue'
import { updateWmsAlertRecord } from "@/api/ware/wmsAlertRecord" import { updateWmsAlertRecord } from "@/api/ware/wmsAlertRecord"
import useUserStore from "@/store/modules/user" import useUserStore from "@/store/modules/user"
import {dayjs} from 'element-plus'
const props = defineProps({ const props = defineProps({
visible: { visible: {
...@@ -62,7 +63,7 @@ const data = reactive({ ...@@ -62,7 +63,7 @@ const data = reactive({
recordId: null, recordId: null,
handlerId: userStore.id, handlerId: userStore.id,
handleResult: '', handleResult: '',
handleTime: '', handleTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
alertStatus: '1' alertStatus: '1'
}, },
rules: { rules: {
...@@ -93,7 +94,7 @@ function resetForm() { ...@@ -93,7 +94,7 @@ function resetForm() {
recordId: props.recordInfo.recordId || null, recordId: props.recordInfo.recordId || null,
handlerId: userStore.id, handlerId: userStore.id,
handleResult: '', handleResult: '',
handleTime: '', handleTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
alertStatus: '1' alertStatus: '1'
} }
if (handleFormRef.value) { if (handleFormRef.value) {
......
...@@ -2,7 +2,18 @@ ...@@ -2,7 +2,18 @@
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="物资" prop="materialId"> <el-form-item label="物资" prop="materialId">
<el-input v-model="queryParams.materialId" placeholder="请输入物资ID" clearable @keyup.enter="handleQuery" /> <el-input
v-model="queryParams.materialName"
placeholder="请选择物资"
readonly
clearable
@click="handleMaterialSelect"
/>
<el-button
slot="append"
icon="Search"
@click="handleMaterialSelect"
></el-button>
</el-form-item> </el-form-item>
<el-form-item label="预警级别" prop="alertLevel"> <el-form-item label="预警级别" prop="alertLevel">
<el-select v-model="queryParams.alertLevel" placeholder="请选择预警级别"> <el-select v-model="queryParams.alertLevel" placeholder="请选择预警级别">
...@@ -25,7 +36,20 @@ ...@@ -25,7 +36,20 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
icon="Edit"
:disabled="multiple"
@click="handleBatchEdit"
v-hasPermi="['ware:wmsAlertRecord:batchEdit']"
>批量处理</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="wmsAlertRecordList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="wmsAlertRecordList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="规则" align="center" prop="alertRule.ruleName" /> <el-table-column label="规则" align="center" prop="alertRule.ruleName" />
<el-table-column label="预警类型" align="center" prop="alertType"> <el-table-column label="预警类型" align="center" prop="alertType">
<template #default="scope"> <template #default="scope">
...@@ -144,13 +168,38 @@ ...@@ -144,13 +168,38 @@
<!-- 处理对话框 --> <!-- 处理对话框 -->
<HandleAlert :visible="handleOpen" :record-info="handleForm" @update:visible="val => handleOpen = val" <HandleAlert :visible="handleOpen" :record-info="handleForm" @update:visible="val => handleOpen = val"
@handle-success="getList" /> @handle-success="getList" />
<!-- 物资选择对话框 -->
<MaterialSelectDialog
ref="materialSelectRef"
v-model:visible="materialSelectVisible"
:title="'选择物资'"
@confirm="handleMaterialConfirm"
@cancel="handleMaterialCancel"
/>
<!-- 批量处理对话框 -->
<el-dialog :title="'批量处理预警记录'" v-model="batchEditDialogVisible" width="500px" append-to-body>
<el-form ref="batchEditFormRef" :model="batchEditForm" :rules="batchEditRules" label-width="80px">
<el-form-item label="处理结果" prop="handleResult">
<el-input v-model="batchEditForm.handleResult" type="textarea" placeholder="请输入处理结果" rows="4" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitBatchEditForm"> </el-button>
<el-button @click="cancelBatchEdit"> </el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
<script setup name="WmsAlertRecord"> <script setup name="WmsAlertRecord">
import { listWmsAlertRecord, getWmsAlertRecord, delWmsAlertRecord, addWmsAlertRecord, updateWmsAlertRecord } from "@/api/ware/wmsAlertRecord" import { listWmsAlertRecord, getWmsAlertRecord, delWmsAlertRecord, addWmsAlertRecord, updateWmsAlertRecord, batchEditWmsAlertRecord } from "@/api/ware/wmsAlertRecord"
import HandleAlert from './components/HandleAlert.vue' import HandleAlert from './components/HandleAlert.vue'
import DetailInfo from './components/DetailInfo.vue' import DetailInfo from './components/DetailInfo.vue'
import MaterialSelectDialog from '@/components/MaterialSelectDialog.vue'
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
...@@ -172,6 +221,24 @@ const detailForm = ref({}) ...@@ -172,6 +221,24 @@ const detailForm = ref({})
const handleOpen = ref(false) const handleOpen = ref(false)
const handleForm = ref({}) const handleForm = ref({})
// 物资选择对话框
const materialSelectRef = ref(null)
const materialSelectVisible = ref(false)
// 选中的物资信息
const selectedMaterial = ref({})
// 批量处理对话框
const batchEditDialogVisible = ref(false)
const batchEditFormRef = ref(null)
const batchEditForm = reactive({
handleResult: ''
})
const batchEditRules = reactive({
handleResult: [
{ required: true, message: '处理结果不能为空', trigger: 'blur' }
]
})
const data = reactive({ const data = reactive({
form: {}, form: {},
queryParams: { queryParams: {
...@@ -180,6 +247,7 @@ const data = reactive({ ...@@ -180,6 +247,7 @@ const data = reactive({
ruleId: null, ruleId: null,
alertType: null, alertType: null,
materialId: null, materialId: null,
materialName: '',
warehouseId: null, warehouseId: null,
locationId: null, locationId: null,
currentValue: null, currentValue: null,
...@@ -251,6 +319,7 @@ function handleQuery() { ...@@ -251,6 +319,7 @@ function handleQuery() {
/** 重置按钮操作 */ /** 重置按钮操作 */
function resetQuery() { function resetQuery() {
proxy.resetForm("queryRef") proxy.resetForm("queryRef")
queryParams.value.materialName = ''
handleQuery() handleQuery()
} }
...@@ -330,5 +399,75 @@ function handleHandle(row) { ...@@ -330,5 +399,75 @@ function handleHandle(row) {
handleOpen.value = true handleOpen.value = true
} }
/** 物资选择按钮操作 */
function handleMaterialSelect() {
materialSelectVisible.value = true
materialSelectRef.value?.handleQuery()
}
/** 物资选择确认 */
function handleMaterialConfirm(materials) {
if (materials && materials.length > 0) {
selectedMaterial.value = materials[0]
queryParams.value.materialId = materials[0].materialId
queryParams.value.materialName = materials[0].materialName
}
}
/** 物资选择取消 */
function handleMaterialCancel() {
materialSelectVisible.value = false
}
/** 批量处理按钮操作 */
function handleBatchEdit() {
if (ids.value.length === 0) {
proxy.$modal.msgWarning('请选择要处理的预警记录')
return
}
resetBatchEditForm()
batchEditDialogVisible.value = true
}
// 重置批量处理表单
const resetBatchEditForm = () => {
batchEditForm.handleResult = ''
if (batchEditFormRef.value) {
batchEditFormRef.value.resetFields()
}
}
// 取消批量处理
const cancelBatchEdit = () => {
batchEditDialogVisible.value = false
resetBatchEditForm()
}
// 提交批量处理表单
const submitBatchEditForm = () => {
if (!batchEditFormRef.value) return
batchEditFormRef.value.validate(valid => {
if (valid) {
// 准备批量处理数据
const batchData = {
ids: ids.value,
handleResult: batchEditForm.handleResult
}
// 调用批量处理API
batchEditWmsAlertRecord(batchData).then(response => {
proxy.$modal.msgSuccess('批量处理成功')
batchEditDialogVisible.value = false
// 刷新列表
getList()
}).catch(error => {
proxy.$modal.msgError('批量处理失败:' + error.message)
console.error('批量处理失败:', error)
})
}
})
}
getList() getList()
</script> </script>
...@@ -12,10 +12,16 @@ ...@@ -12,10 +12,16 @@
<el-form-item label="物资" prop="materialId"> <el-form-item label="物资" prop="materialId">
<el-input <el-input
v-model="queryParams.materialName" v-model="queryParams.materialName"
placeholder="请输入物资名称" placeholder="请选择物资"
readonly
clearable clearable
@keyup.enter="handleQuery" @click="handleQueryMaterialSelect"
/> />
<el-button
slot="append"
icon="Search"
@click="handleQueryMaterialSelect"
></el-button>
</el-form-item> </el-form-item>
<el-form-item label="预警类型" prop="alertType"> <el-form-item label="预警类型" prop="alertType">
...@@ -232,6 +238,8 @@ const title = ref("") ...@@ -232,6 +238,8 @@ const title = ref("")
const materialSelectDialogRef = ref(null) const materialSelectDialogRef = ref(null)
const materialSelectVisible = ref(false) const materialSelectVisible = ref(false)
const materialInfo = ref(null) const materialInfo = ref(null)
// 标识当前是表单选择还是搜索条件选择
const isQueryMaterialSelect = ref(false)
const data = reactive({ const data = reactive({
form: {}, form: {},
...@@ -332,6 +340,7 @@ function handleQuery() { ...@@ -332,6 +340,7 @@ function handleQuery() {
/** 重置按钮操作 */ /** 重置按钮操作 */
function resetQuery() { function resetQuery() {
proxy.resetForm("queryRef") proxy.resetForm("queryRef")
queryParams.value.materialName = null
handleQuery() handleQuery()
} }
...@@ -361,8 +370,9 @@ function handleUpdate(row) { ...@@ -361,8 +370,9 @@ function handleUpdate(row) {
}) })
} }
// 打开物资选择对话框 // 打开物资选择对话框(表单)
function openMaterialSelectDialog() { function openMaterialSelectDialog() {
isQueryMaterialSelect.value = false
materialSelectVisible.value = true materialSelectVisible.value = true
materialSelectDialogRef.value?.handleQuery() materialSelectDialogRef.value?.handleQuery()
} }
...@@ -371,11 +381,21 @@ function openMaterialSelectDialog() { ...@@ -371,11 +381,21 @@ function openMaterialSelectDialog() {
function handleMaterialSelectConfirm(materials) { function handleMaterialSelectConfirm(materials) {
if (materials && materials.length > 0) { if (materials && materials.length > 0) {
const selectedMaterial = materials[0] const selectedMaterial = materials[0]
if (isQueryMaterialSelect.value) {
// 更新搜索条件
queryParams.value.materialId = selectedMaterial.materialId
queryParams.value.materialName = selectedMaterial.materialName
} else {
// 更新表单
form.value.materialId = selectedMaterial.materialId form.value.materialId = selectedMaterial.materialId
form.value.materialName = selectedMaterial.materialName form.value.materialName = selectedMaterial.materialName
// 可以选择存储更多物资信息,方便显示 // 可以选择存储更多物资信息,方便显示
materialInfo.value = selectedMaterial materialInfo.value = selectedMaterial
} }
materialSelectVisible.value = false
}
} }
// 处理物资选择取消 // 处理物资选择取消
...@@ -383,6 +403,15 @@ function handleMaterialSelectCancel() { ...@@ -383,6 +403,15 @@ function handleMaterialSelectCancel() {
materialSelectVisible.value = false materialSelectVisible.value = false
} }
// 处理搜索条件中的物资选择
function handleQueryMaterialSelect() {
isQueryMaterialSelect.value = true
materialSelectVisible.value = true
materialSelectDialogRef.value?.handleQuery()
}
/** 提交按钮 */ /** 提交按钮 */
function submitForm() { function submitForm() {
proxy.$refs["wmsAlertRuleRef"].validate(valid => { proxy.$refs["wmsAlertRuleRef"].validate(valid => {
......
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table ref="inventoryTableRef" :data="inventoryDetailList" row-key="itemDetailId" border height="calc(100vh - 200px)" <el-table ref="inventoryTableRef" :data="inventoryDetailList" row-key="itemDetailId" border
@expand-change="handleExpandChange"> height="calc(100vh - 200px)" @expand-change="handleExpandChange">
<el-table-column type="expand" fixed="left"> <el-table-column type="expand" fixed="left">
<template #default="props"> <template #default="props">
<el-table :data="props.row.inBoundItem" row-key="itemId" border> <el-table :data="props.row.inBoundItem" row-key="itemId" border>
...@@ -26,7 +26,8 @@ ...@@ -26,7 +26,8 @@
<el-table-column label="金额(元)" prop="amount" /> <el-table-column label="金额(元)" prop="amount" />
<el-table-column label="仓库/库区/货架"> <el-table-column label="仓库/库区/货架">
<template #default="scope"> <template #default="scope">
{{ scope.row.wmsWarehouse?.warehouseName || '-' }}/{{ scope.row.wmsArea?.areaName || '-' }}/{{ scope.row.wmsLocation?.locationName || '-' }} {{ scope.row.wmsWarehouse?.warehouseName || '-' }}/{{ scope.row.wmsArea?.areaName || '-' }}/{{
scope.row.wmsLocation?.locationName || '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="storageLocation" label="PTL标签" /> <el-table-column prop="storageLocation" label="PTL标签" />
...@@ -45,9 +46,10 @@ ...@@ -45,9 +46,10 @@
<el-table-column prop="wmsMaterial.materialName" label="物资名称" width="150" /> <el-table-column prop="wmsMaterial.materialName" label="物资名称" width="150" />
<el-table-column prop="wmsMaterial.materialCode" label="物资编码" width="150" /> <el-table-column prop="wmsMaterial.materialCode" label="物资编码" width="150" />
<el-table-column prop="wmsMaterial.specification" label="规格型号" width="150" /> <el-table-column prop="wmsMaterial.specification" label="规格型号" width="150" />
<el-table-column prop="planQuantity" label="计划入库" width="100" > <el-table-column prop="planQuantity" label="计划入库" width="100">
<template #default="scope"> <template #default="scope">
<el-tag type="primary" effect="dark" class="bg-[#409eff] border-[#409eff]">{{ scope.row.planQuantity }}</el-tag> <el-tag type="primary" effect="dark" class="bg-[#409eff] border-[#409eff]">{{ scope.row.planQuantity
}}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="actualQuantity" label="实际入库" width="100"> <el-table-column prop="actualQuantity" label="实际入库" width="100">
...@@ -325,7 +327,6 @@ function handlePrintRfidTag(row) { ...@@ -325,7 +327,6 @@ function handlePrintRfidTag(row) {
specification: row.wmsMaterial?.specification || '' specification: row.wmsMaterial?.specification || ''
} }
alert('打印RFID标签:' + row.rfidTagIds)
} }
......
...@@ -136,10 +136,11 @@ ...@@ -136,10 +136,11 @@
<span>{{ scope.row.rfidTag || '-' }}</span> <span>{{ scope.row.rfidTag || '-' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180" fixed="right"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="280" fixed="right">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Document" @click="handleFlowQuery(scope.row)" v-hasPermi="['ware:wmsInventory:flow']">库存履历</el-button> <el-button link type="primary" icon="Document" @click="handleFlowQuery(scope.row)" v-hasPermi="['ware:wmsInventory:flow']">库存履历</el-button>
<el-button link type="primary" icon="View" @click="handleLocationVisualization(scope.row)" v-hasPermi="['ware:wmsInventory:visualization']">货架可视化</el-button> <el-button link type="primary" icon="View" @click="handleLocationVisualization(scope.row)" v-hasPermi="['ware:wmsInventory:visualization']">货架可视化</el-button>
<el-button link type="primary" icon="EditPen" @click="handleChangeRfidTag(scope.row)" v-hasPermi="['ware:wmsInventory:updaterfid']">更换标签</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -175,18 +176,28 @@ ...@@ -175,18 +176,28 @@
v-model:inventory-id="selectedInventoryId" v-model:inventory-id="selectedInventoryId"
title="库存履历" title="库存履历"
/> />
<!-- RFID标签选择对话框 -->
<RfidTagSelectDialog
ref="rfidTagSelectDialogRef"
v-model:visible="rfidTagDialogVisible"
title="选择RFID标签"
@confirm="handleRfidTagConfirm"
@cancel="handleRfidTagCancel"
/>
</div> </div>
</template> </template>
<script setup name="InventorySummary"> <script setup name="InventorySummary">
import { ref, reactive, onMounted, watch } from 'vue' import { ref, reactive, onMounted, watch } from 'vue'
import { listMaterialInventory, getMaterialInventoryDetail } from '@/api/ware/wmsInventory' import { listMaterialInventory, getMaterialInventoryDetail, updateWmsInventory } from '@/api/ware/wmsInventory'
import { listWmsMaterialCategory } from '@/api/ware/wmsMaterialCategory' import { listWmsMaterialCategory } from '@/api/ware/wmsMaterialCategory'
import { listWmsWarehouse } from '@/api/ware/wmsWarehouse' import { listWmsWarehouse } from '@/api/ware/wmsWarehouse'
import { listWmsArea } from '@/api/ware/wmsArea' import { listWmsArea } from '@/api/ware/wmsArea'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import LocationVisualDialog from './components/LocationVisualDialog.vue' import LocationVisualDialog from './components/LocationVisualDialog.vue'
import InventoryFlowDialog from '@/components/InventoryFlowDialog.vue' import InventoryFlowDialog from '@/components/InventoryFlowDialog.vue'
import RfidTagSelectDialog from '@/components/RfidTagSelectDialog.vue'
import { listWmsLocation } from '@/api/ware/wmsLocation' import { listWmsLocation } from '@/api/ware/wmsLocation'
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
...@@ -234,6 +245,11 @@ const locations = ref([]) ...@@ -234,6 +245,11 @@ const locations = ref([])
const inventoryFlowVisible = ref(false) const inventoryFlowVisible = ref(false)
const selectedInventoryId = ref(null) const selectedInventoryId = ref(null)
// RFID标签选择对话框
const rfidTagDialogVisible = ref(false)
const selectedInventory = ref(null)
const rfidTagSelectDialogRef = ref(null)
// 获取库存列表 // 获取库存列表
const getInventoryList = () => { const getInventoryList = () => {
listMaterialInventory(queryParams).then(response => { listMaterialInventory(queryParams).then(response => {
...@@ -398,6 +414,66 @@ const handleFlowQuery = (row) => { ...@@ -398,6 +414,66 @@ const handleFlowQuery = (row) => {
inventoryFlowVisible.value = true inventoryFlowVisible.value = true
} }
// 更换RFID标签
const handleChangeRfidTag = (row) => {
// 保存当前选中的库存信息
selectedInventory.value = row
// 显示RFID标签选择对话框
rfidTagDialogVisible.value = true
}
// 处理RFID标签选择确认
const handleRfidTagConfirm = (selectedTags) => {
if (!selectedTags || selectedTags.length === 0) {
ElMessage.warning('请选择一个RFID标签')
return
}
// 获取选中的标签
const selectedTag = selectedTags[0]
// 准备更新数据
const updateData = {
inventoryId: selectedInventory.value.inventoryId,
rfidTag: selectedTag.tagCode,
rfidTagId: selectedTag.tagId
}
// 调用API更新库存的RFID标签
updateWmsInventory(updateData).then(response => {
ElMessage.success('RFID标签更换成功')
// 刷新当前展开行的数据
const expandedRow = inventoryList.value.find(row =>
row.materialId === selectedInventory.value.material.materialId
)
if (expandedRow) {
const params = {
materialId: expandedRow.materialId,
warehouseId: queryParams.warehouseId,
areaId: queryParams.areaId,
showzerostock: queryParams.showzerostock
}
getMaterialInventoryDetail(params).then(response => {
expandedRow.inventoryList = response.data
})
}
}).catch(error => {
ElMessage.error('RFID标签更换失败:' + error.message)
console.error('RFID标签更换失败:', error)
})
// 关闭对话框
rfidTagDialogVisible.value = false
}
// 处理RFID标签选择取消
const handleRfidTagCancel = () => {
// 关闭对话框
rfidTagDialogVisible.value = false
// 清空选中的库存信息
selectedInventory.value = null
}
// 初始化 // 初始化
onMounted(() => { onMounted(() => {
initWarehouseList() initWarehouseList()
......
...@@ -34,11 +34,15 @@ ...@@ -34,11 +34,15 @@
v-hasPermi="['ware:wmsInventoryPlan:add']">新增</el-button> v-hasPermi="['ware:wmsInventoryPlan:add']">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" <el-button type="success" plain icon="Edit"
:disabled="single || !canBatchEditOrDelete"
@click="handleUpdate"
v-hasPermi="['ware:wmsInventoryPlan:edit']">修改</el-button> v-hasPermi="['ware:wmsInventoryPlan:edit']">修改</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" <el-button type="danger" plain icon="Delete"
:disabled="multiple || !canBatchEditOrDelete"
@click="handleDelete"
v-hasPermi="['ware:wmsInventoryPlan:remove']">删除</el-button> v-hasPermi="['ware:wmsInventoryPlan:remove']">删除</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
...@@ -58,14 +62,14 @@ ...@@ -58,14 +62,14 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="仓库" align="center" prop="warehouseId" /> <el-table-column label="仓库" align="center" prop="warehouseId" />
<el-table-column label="库区" align="center" prop="areaNames" /> <el-table-column label="库区" align="center" prop="areaNames" width="180" />
<el-table-column label="物资" align="center" prop="materialNames" /> <el-table-column label="物资" align="center" prop="materialNames" width="180" />
<el-table-column label="计划开始时间" align="center" prop="startTime" width="180"> <el-table-column label="计划开始时间" align="center" prop="startTime">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="计划结束时间" align="center" prop="endTime" width="180"> <el-table-column label="计划结束时间" align="center" prop="endTime">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
</template> </template>
...@@ -91,8 +95,10 @@ ...@@ -91,8 +95,10 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150" fixed="right"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150" fixed="right">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-if="scope.row.planStatus === '0'"
v-hasPermi="['ware:wmsInventoryPlan:edit']">修改</el-button> v-hasPermi="['ware:wmsInventoryPlan:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-if="scope.row.planStatus === '0'"
v-hasPermi="['ware:wmsInventoryPlan:remove']">删除</el-button> v-hasPermi="['ware:wmsInventoryPlan:remove']">删除</el-button>
<el-button link type="primary" icon="VideoPlay" @click="handleGenerate(scope.row)" <el-button link type="primary" icon="VideoPlay" @click="handleGenerate(scope.row)"
v-hasPermi="['ware:wmsInventoryPlan:generate']">执行</el-button> v-hasPermi="['ware:wmsInventoryPlan:generate']">执行</el-button>
...@@ -184,6 +190,7 @@ ...@@ -184,6 +190,7 @@
</template> </template>
<script setup name="WmsInventoryPlan"> <script setup name="WmsInventoryPlan">
import { computed, ref, reactive } from 'vue'
import { listWmsInventoryPlan, getWmsInventoryPlan, delWmsInventoryPlan, addWmsInventoryPlan, updateWmsInventoryPlan, generateAllInventoryPlan, generateInventoryPlan } from "@/api/ware/wmsInventoryPlan" import { listWmsInventoryPlan, getWmsInventoryPlan, delWmsInventoryPlan, addWmsInventoryPlan, updateWmsInventoryPlan, generateAllInventoryPlan, generateInventoryPlan } from "@/api/ware/wmsInventoryPlan"
import WarehouseSelectDialog from "@/components/WarehouseSelectDialog.vue" import WarehouseSelectDialog from "@/components/WarehouseSelectDialog.vue"
import AreaSelectTreeDialog from "@/components/AreaSelectTreeDialog.vue" import AreaSelectTreeDialog from "@/components/AreaSelectTreeDialog.vue"
...@@ -268,6 +275,14 @@ const data = reactive({ ...@@ -268,6 +275,14 @@ const data = reactive({
const { queryParams, form, rules } = toRefs(data) const { queryParams, form, rules } = toRefs(data)
// 计算是否可以批量编辑或删除
const canBatchEditOrDelete = computed(() => {
// 只有当所有选中的记录都是未开始状态(planStatus === '0')时,才允许批量操作
return ids.value.length > 0 && wmsInventoryPlanList.value.every(item => {
return !ids.value.includes(item.planId) || item.planStatus === '0'
})
})
/** 查询盘点计划列表 */ /** 查询盘点计划列表 */
function getList() { function getList() {
loading.value = true loading.value = true
...@@ -373,6 +388,7 @@ function handleSelectionChange(selection) { ...@@ -373,6 +388,7 @@ function handleSelectionChange(selection) {
ids.value = selection.map(item => item.planId) ids.value = selection.map(item => item.planId)
single.value = selection.length != 1 single.value = selection.length != 1
multiple.value = !selection.length multiple.value = !selection.length
// 每次选择变化时,canBatchEditOrDelete 会自动重新计算
} }
/** 新增按钮操作 */ /** 新增按钮操作 */
......
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="盘点任务ID" prop="taskId">
<el-input
v-model="queryParams.taskId"
placeholder="请输入盘点任务ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="盘点计划ID" prop="planId">
<el-input
v-model="queryParams.planId"
placeholder="请输入盘点计划ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="仓库ID" prop="warehouseId">
<el-input
v-model="queryParams.warehouseId"
placeholder="请输入仓库ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="仓库名称" prop="warehouseName"> <el-form-item label="仓库名称" prop="warehouseName">
<el-input <el-input
v-model="queryParams.warehouseName" v-model="queryParams.warehouseName"
...@@ -33,31 +9,7 @@ ...@@ -33,31 +9,7 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="库区ID" prop="areaId"> <el-form-item label="盘点员" prop="checkerName">
<el-input
v-model="queryParams.areaId"
placeholder="请输入库区ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="库区名称" prop="areaName">
<el-input
v-model="queryParams.areaName"
placeholder="请输入库区名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="盘点员ID" prop="checkerId">
<el-input
v-model="queryParams.checkerId"
placeholder="请输入盘点员ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="盘点员姓名" prop="checkerName">
<el-input <el-input
v-model="queryParams.checkerName" v-model="queryParams.checkerName"
placeholder="请输入盘点员姓名" placeholder="请输入盘点员姓名"
...@@ -65,110 +17,6 @@ ...@@ -65,110 +17,6 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="盘点开始时间" prop="startTime">
<el-date-picker clearable
v-model="queryParams.startTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择盘点开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="盘点结束时间" prop="endTime">
<el-date-picker clearable
v-model="queryParams.endTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择盘点结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="盘点总项数" prop="totalItems">
<el-input
v-model="queryParams.totalItems"
placeholder="请输入盘点总项数"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="已盘项数" prop="countedItems">
<el-input
v-model="queryParams.countedItems"
placeholder="请输入已盘项数"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="盘盈项数" prop="surplusItems">
<el-input
v-model="queryParams.surplusItems"
placeholder="请输入盘盈项数"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="盘亏项数" prop="deficitItems">
<el-input
v-model="queryParams.deficitItems"
placeholder="请输入盘亏项数"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="盘盈总量" prop="totalSurplus">
<el-input
v-model="queryParams.totalSurplus"
placeholder="请输入盘盈总量"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="盘亏总量" prop="totalDeficit">
<el-input
v-model="queryParams.totalDeficit"
placeholder="请输入盘亏总量"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="总差异价值" prop="totalDifferenceValue">
<el-input
v-model="queryParams.totalDifferenceValue"
placeholder="请输入总差异价值"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="差异率" prop="differenceRate">
<el-input
v-model="queryParams.differenceRate"
placeholder="请输入差异率"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="审核人ID" prop="auditorId">
<el-input
v-model="queryParams.auditorId"
placeholder="请输入审核人ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="审核人姓名" prop="auditorName">
<el-input
v-model="queryParams.auditorName"
placeholder="请输入审核人姓名"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="审核时间" prop="auditTime">
<el-date-picker clearable
v-model="queryParams.auditTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择审核时间">
</el-date-picker>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
......
<template>
<el-form ref="addFormRef" :model="form" :rules="rules" label-width="110px">
<el-form-item label="任务名称" prop="taskName">
<el-input v-model="form.taskName" placeholder="请输入任务名称" />
</el-form-item>
<el-form-item label="仓库" prop="warehouseId">
<div style="display: flex; align-items: center;">
<el-input v-model="form.warehouseName" placeholder="请选择仓库" readonly style="flex: 1;" />
<el-button type="primary" @click="openWarehouseSelectDialog">选择</el-button>
</div>
</el-form-item>
<el-form-item label="库区" prop="areaIds">
<div style="display: flex; align-items: center;">
<el-input v-model="form.areaNames" placeholder="请选择库区" readonly style="flex: 1;" />
<el-button type="primary" @click="openAreaSelectDialog">选择</el-button>
</div>
</el-form-item>
<el-form-item label="物资" prop="materialIds">
<div style="display: flex; align-items: center;">
<el-input v-model="form.materialNames" placeholder="请选择物资" readonly style="flex: 1;" />
<el-button type="primary" @click="openMaterialSelectDialog">选择</el-button>
</div>
</el-form-item>
<el-form-item label="是否使用RFID" prop="useRfid">
<el-switch v-model="form.useRfid" active-text="是" inactive-text="否" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<!-- 仓库选择对话框 -->
<WarehouseSelectDialog ref="warehouseSelectDialogRef" v-model:visible="warehouseSelectVisible"
@confirm="handleWarehouseConfirm" />
<!-- 库区选择对话框 -->
<AreaSelectTreeDialog ref="areaSelectDialogRef" v-model:visible="areaSelectVisible" @confirm="handleAreaConfirm" />
<!-- 物资选择对话框 -->
<MaterialSelectDialog ref="materialSelectDialogRef" v-model:visible="materialSelectVisible"
@confirm="handleMaterialConfirm" />
</template>
<script setup name="AddForm">
import { ref, reactive, toRefs, defineEmits, getCurrentInstance } from 'vue'
import WarehouseSelectDialog from "@/components/WarehouseSelectDialog.vue"
import AreaSelectTreeDialog from "@/components/AreaSelectTreeDialog.vue"
import MaterialSelectDialog from "@/components/MaterialSelectDialog.vue"
const emit = defineEmits(['submit', 'cancel'])
// 获取当前实例
const { proxy } = getCurrentInstance()
// 表单引用
const addFormRef = ref(null)
// 选择对话框控制变量
const warehouseSelectDialogRef = ref(null)
const areaSelectDialogRef = ref(null)
const materialSelectDialogRef = ref(null)
const warehouseSelectVisible = ref(false)
const areaSelectVisible = ref(false)
const materialSelectVisible = ref(false)
const data = reactive({
form: {
taskName: '',
warehouseId: null,
warehouseName: '',
areaIds: [],
areaNames: '',
materialIds: [],
materialNames: '',
useRfid: false,
remark: ''
},
rules: {
taskName: [
{ required: true, message: "任务名称不能为空", trigger: "blur" }
],
warehouseId: [
{ required: true, message: "仓库不能为空", trigger: "change" }
],
areaIds: [
{ required: true, message: "库区不能为空", trigger: "change" }
],
materialIds: [
{ required: true, message: "物资不能为空", trigger: "change" }
]
}
})
const { form, rules } = toRefs(data)
// 打开仓库选择对话框
function openWarehouseSelectDialog() {
warehouseSelectVisible.value = true
warehouseSelectDialogRef.value?.handleQuery()
}
// 打开库区选择对话框
function openAreaSelectDialog() {
if (!form.value.warehouseId) {
proxy.$modal.msgWarning("请先选择仓库")
return
}
areaSelectVisible.value = true
areaSelectDialogRef.value?.handleQuery()
}
// 打开物资选择对话框
function openMaterialSelectDialog() {
materialSelectVisible.value = true
materialSelectDialogRef.value?.handleQuery()
}
// 处理仓库选择确认
function handleWarehouseConfirm(selection) {
if (selection && selection.length > 0) {
const warehouse = selection[0]
form.value.warehouseId = warehouse.warehouseId
form.value.warehouseName = warehouse.warehouseName
// 清空已选择的库区和物资
form.value.areaIds = []
form.value.areaNames = ''
form.value.materialIds = []
form.value.materialNames = ''
}
}
// 处理库区选择确认
function handleAreaConfirm(selection) {
if (selection && selection.length > 0) {
form.value.areaIds = selection.map(item => item.areaId)
form.value.areaNames = selection.map(item => item.areaName).join(',')
}
}
// 处理物资选择确认
function handleMaterialConfirm(selection) {
if (selection && selection.length > 0) {
form.value.materialIds = selection.map(item => item.materialId)
form.value.materialNames = selection.map(item => item.materialName).join(',')
}
}
// 提交表单
function submitForm(callback) {
addFormRef.value.validate(valid => {
if (valid) {
emit('submit', form.value)
callback && callback(form.value)
}
})
}
// 取消操作
function handleCancel() {
emit('cancel')
}
// 重置表单
function resetForm() {
form.value = {
taskName: '',
warehouseId: null,
warehouseName: '',
areaIds: [],
areaNames: '',
materialIds: [],
materialNames: '',
useRfid: false,
remark: ''
}
addFormRef.value?.resetFields()
}
// 暴露方法
defineExpose({
submitForm,
resetForm
})
</script>
\ No newline at end of file
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
<h3>任务基础信息</h3> <h3>任务基础信息</h3>
<el-descriptions :column="2" border> <el-descriptions :column="2" border>
<el-descriptions-item label="盘点计划ID">{{ taskInfo.planId }}</el-descriptions-item> <el-descriptions-item label="盘点计划ID">{{ taskInfo.planId }}</el-descriptions-item>
<el-descriptions-item label="盘点任务编号">{{ taskInfo.taskNo }}</el-descriptions-item> <el-descriptions-item label="任务编号">{{ taskInfo.taskNo }}</el-descriptions-item>
<el-descriptions-item label="任务状态">{{ taskInfo.taskStatus }}</el-descriptions-item> <el-descriptions-item label="任务名称">{{ taskInfo.taskName }}</el-descriptions-item>
<el-descriptions-item label="总盘点数">{{ taskInfo.totalItems }}</el-descriptions-item> <el-descriptions-item label="总盘点数">{{ taskInfo.totalItems }}</el-descriptions-item>
<el-descriptions-item label="已盘数">{{ taskInfo.countedItems }}</el-descriptions-item> <el-descriptions-item label="已盘数">{{ taskInfo.countedItems }}</el-descriptions-item>
<!-- <el-descriptions-item label="盘点设备">{{ taskInfo.inventoryDevice }}</el-descriptions-item> --> <!-- <el-descriptions-item label="盘点设备">{{ taskInfo.inventoryDevice }}</el-descriptions-item> -->
......
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="128px"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
<el-form-item label="盘点任务编号" prop="taskNo"> <el-form-item label="任务编号" prop="taskNo">
<el-input <el-input v-model="queryParams.taskNo" placeholder="请输入盘点任务编号" clearable @keyup.enter="handleQuery" />
v-model="queryParams.taskNo" </el-form-item>
placeholder="请输入盘点任务编号" <el-form-item label="任务名称" prop="taskName">
clearable <el-input v-model="queryParams.taskName" placeholder="请输入任务名称" clearable @keyup.enter="handleQuery" />
@keyup.enter="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
...@@ -16,128 +14,43 @@ ...@@ -16,128 +14,43 @@
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['ware:wmsInventoryTask:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="primary" plain icon="Plus" @click="handleAdd"
type="success" v-hasPermi="['ware:wmsInventoryTask:add']">新增</el-button>
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['ware:wmsInventoryTask:edit']"
>修改</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
type="danger" v-hasPermi="['ware:wmsInventoryTask:remove']">删除</el-button>
plain </el-col>
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['ware:wmsInventoryTask:remove']"
>删除</el-button>
</el-col> -->
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="wmsInventoryTaskList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="wmsInventoryTaskList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="盘点计划ID" align="center" prop="planId" /> <el-table-column label="盘点计划ID" align="center" prop="planId" />
<el-table-column label="盘点任务编号" align="center" prop="taskNo" /> <el-table-column label="任务编号" align="center" prop="taskNo" />
<!-- <el-table-column label="库区ID" align="center" prop="areaId" /> <el-table-column label="任务名称" align="center" prop="taskName" />
<el-table-column label="货架范围" align="center" prop="locationRange" /> <el-table-column label="仓库" align="center" prop="warehouseName" />
<el-table-column label="负责人ID" align="center" prop="assigneeId" />
<el-table-column label="协助人IDs" align="center" prop="assistantIds" /> -->
<!-- <el-table-column label="任务状态" align="center" prop="taskStatus" /> -->
<!-- <el-table-column label="实际开始时间" align="center" prop="startTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="实际结束时间" align="center" prop="endTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column> -->
<el-table-column label="总盘点数" align="center" prop="totalItems" /> <el-table-column label="总盘点数" align="center" prop="totalItems" />
<el-table-column label="已盘数" align="center" prop="countedItems" /> <el-table-column label="已盘数" align="center" prop="countedItems" />
<!-- <el-table-column label="盘点设备" align="center" prop="inventoryDevice" /> --> <el-table-column label="创建时间" align="center" prop="createTime" />
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" width="240" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="View" @click="handleDetail(scope.row)" v-hasPermi="['ware:wmsInventoryTask:detail']">详情</el-button> <el-button link type="primary" icon="View" @click="handleDetail(scope.row)"
<!-- <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['ware:wmsInventoryTask:edit']">修改</el-button> --> v-hasPermi="['ware:wmsInventoryTask:detail']">详情</el-button>
<!-- <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['ware:wmsInventoryTask:remove']">删除</el-button> --> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['ware:wmsInventoryTask:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-show="total>0" v-model:limit="queryParams.pageSize" @pagination="getList" />
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改盘点任务对话框 --> <!-- 添加盘点任务对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body> <el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="wmsInventoryTaskRef" :model="form" :rules="rules" label-width="80px"> <AddForm ref="addFormRef" />
<el-form-item label="盘点计划ID" prop="planId">
<el-input v-model="form.planId" placeholder="请输入盘点计划ID" />
</el-form-item>
<el-form-item label="盘点任务编号" prop="taskNo">
<el-input v-model="form.taskNo" placeholder="请输入盘点任务编号" />
</el-form-item>
<el-form-item label="库区ID" prop="areaId">
<el-input v-model="form.areaId" placeholder="请输入库区ID" />
</el-form-item>
<el-form-item label="货架范围" prop="locationRange">
<el-input v-model="form.locationRange" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="负责人ID" prop="assigneeId">
<el-input v-model="form.assigneeId" placeholder="请输入负责人ID" />
</el-form-item>
<el-form-item label="协助人IDs" prop="assistantIds">
<el-input v-model="form.assistantIds" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="实际开始时间" prop="startTime">
<el-date-picker clearable
v-model="form.startTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择实际开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="实际结束时间" prop="endTime">
<el-date-picker clearable
v-model="form.endTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择实际结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="总物料数" prop="totalItems">
<el-input v-model="form.totalItems" placeholder="请输入总物料数" />
</el-form-item>
<el-form-item label="已盘物料数" prop="countedItems">
<el-input v-model="form.countedItems" placeholder="请输入已盘物料数" />
</el-form-item>
<el-form-item label="盘点设备" prop="inventoryDevice">
<el-input v-model="form.inventoryDevice" placeholder="请输入盘点设备" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button> <el-button type="primary" @click="submitForm">确 定</el-button>
...@@ -147,17 +60,8 @@ ...@@ -147,17 +60,8 @@
</el-dialog> </el-dialog>
<!-- 任务详情对话框 --> <!-- 任务详情对话框 -->
<el-dialog <el-dialog title="任务详情" v-model="detailOpen" width="80%" append-to-body @close="handleDetailClose">
title="任务详情" <DetailInfo :task-info="detailForm" :visible="detailOpen" />
v-model="detailOpen"
width="80%"
append-to-body
@close="handleDetailClose"
>
<DetailInfo
:task-info="detailForm"
:visible="detailOpen"
/>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="detailOpen = false">关 闭</el-button> <el-button @click="detailOpen = false">关 闭</el-button>
...@@ -170,6 +74,7 @@ ...@@ -170,6 +74,7 @@
<script setup name="WmsInventoryTask"> <script setup name="WmsInventoryTask">
import { listWmsInventoryTask, getWmsInventoryTask, delWmsInventoryTask, addWmsInventoryTask, updateWmsInventoryTask } from "@/api/ware/wmsInventoryTask" import { listWmsInventoryTask, getWmsInventoryTask, delWmsInventoryTask, addWmsInventoryTask, updateWmsInventoryTask } from "@/api/ware/wmsInventoryTask"
import DetailInfo from "./components/DetailInfo.vue" import DetailInfo from "./components/DetailInfo.vue"
import AddForm from "./components/AddForm.vue"
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
...@@ -298,34 +203,30 @@ function handleUpdate(row) { ...@@ -298,34 +203,30 @@ function handleUpdate(row) {
/** 提交按钮 */ /** 提交按钮 */
function submitForm() { function submitForm() {
proxy.$refs["wmsInventoryTaskRef"].validate(valid => { loading.value = true
if (valid) { proxy.$refs.addFormRef.submitForm((formData) => {
if (form.value.taskId != null) { addWmsInventoryTask(formData).then(response => {
updateWmsInventoryTask(form.value).then(response => { loading.value = false
proxy.$modal.msgSuccess("修改成功")
open.value = false
getList()
})
} else {
addWmsInventoryTask(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功") proxy.$modal.msgSuccess("新增成功")
open.value = false open.value = false
getList() getList()
}).catch(() => {
loading.value = false
}) })
}
}
}) })
} }
/** 删除按钮操作 */ /** 删除按钮操作 */
function handleDelete(row) { function handleDelete(row) {
const _taskIds = row.taskId || ids.value const _taskIds = row.taskId || ids.value
proxy.$modal.confirm('是否确认删除盘点任务编号为"' + _taskIds + '"的数据项?').then(function() { proxy.$modal.confirm('是否确认删除盘点任务编号为"' + _taskIds + '"的数据项?').then(function () {
return delWmsInventoryTask(_taskIds) return delWmsInventoryTask(_taskIds)
}).then(() => { }).then(() => {
getList() getList()
proxy.$modal.msgSuccess("删除成功") proxy.$modal.msgSuccess("删除成功")
}).catch(() => {}) }).catch(() => { })
} }
/** 导出按钮操作 */ /** 导出按钮操作 */
......
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="RFID卡ID" prop="cardId"> <el-form-item label="物资" prop="materialId">
<el-input
v-model="queryParams.cardId"
placeholder="请输入RFID卡ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="物资ID" prop="materialId">
<el-input <el-input
v-model="queryParams.materialId" v-model="queryParams.materialName"
placeholder="请输入物资ID" placeholder="请选择物资"
readonly
clearable clearable
@keyup.enter="handleQuery" @click="handleMaterialSelect"
/>
</el-form-item>
<el-form-item label="库存ID" prop="inventoryId">
<el-input
v-model="queryParams.inventoryId"
placeholder="请输入库存ID"
clearable
@keyup.enter="handleQuery"
/> />
<el-button
slot="append"
icon="Search"
@click="handleMaterialSelect"
></el-button>
</el-form-item> </el-form-item>
<el-form-item label="批次号" prop="batchNo"> <el-form-item label="批次号" prop="batchNo">
<el-input <el-input
v-model="queryParams.batchNo" v-model="queryParams.batchNo"
...@@ -33,14 +24,6 @@ ...@@ -33,14 +24,6 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="绑定数量" prop="bindingQuantity">
<el-input
v-model="queryParams.bindingQuantity"
placeholder="请输入绑定数量"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="绑定单位" prop="bindingUnit"> <el-form-item label="绑定单位" prop="bindingUnit">
<el-input <el-input
v-model="queryParams.bindingUnit" v-model="queryParams.bindingUnit"
...@@ -57,22 +40,7 @@ ...@@ -57,22 +40,7 @@
placeholder="请选择绑定时间"> placeholder="请选择绑定时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="绑定人ID" prop="binderId">
<el-input
v-model="queryParams.binderId"
placeholder="请输入绑定人ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="绑定设备ID" prop="bindDeviceId">
<el-input
v-model="queryParams.bindDeviceId"
placeholder="请输入绑定设备ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="解绑时间" prop="unbindTime"> <el-form-item label="解绑时间" prop="unbindTime">
<el-date-picker clearable <el-date-picker clearable
v-model="queryParams.unbindTime" v-model="queryParams.unbindTime"
...@@ -81,119 +49,23 @@ ...@@ -81,119 +49,23 @@
placeholder="请选择解绑时间"> placeholder="请选择解绑时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="解绑人ID" prop="unbinderId">
<el-input
v-model="queryParams.unbinderId"
placeholder="请输入解绑人ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="有效期开始时间" prop="validStartTime">
<el-date-picker clearable
v-model="queryParams.validStartTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择有效期开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="有效期结束时间" prop="validEndTime">
<el-date-picker clearable
v-model="queryParams.validEndTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择有效期结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="是否永久有效" prop="isPermanent">
<el-input
v-model="queryParams.isPermanent"
placeholder="请输入是否永久有效"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="当前位置ID" prop="currentLocationId">
<el-input
v-model="queryParams.currentLocationId"
placeholder="请输入当前位置ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="最后位置ID" prop="lastLocationId">
<el-input
v-model="queryParams.lastLocationId"
placeholder="请输入最后位置ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="最后移动时间" prop="lastMoveTime">
<el-date-picker clearable
v-model="queryParams.lastMoveTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择最后移动时间">
</el-date-picker>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['ware:wmsRfidBinding:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['ware:wmsRfidBinding:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['ware:wmsRfidBinding:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['ware:wmsRfidBinding:export']"
>导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="wmsRfidBindingList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="wmsRfidBindingList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column label="RFID" align="center" prop="rfidTag.tagCode" />
<el-table-column label="绑定记录ID" align="center" prop="bindingId" /> <el-table-column label="物资" align="center" prop="material.materialName" />
<el-table-column label="RFID卡ID" align="center" prop="cardId" /> <el-table-column label="批次号" align="center" prop="batchNo" width="120" />
<el-table-column label="物资ID" align="center" prop="materialId" />
<el-table-column label="库存ID" align="center" prop="inventoryId" />
<el-table-column label="批次号" align="center" prop="batchNo" />
<el-table-column label="绑定类型" align="center" prop="bindingType" /> <el-table-column label="绑定类型" align="center" prop="bindingType" />
<el-table-column label="绑定状态" align="center" prop="bindingStatus" /> <el-table-column label="绑定状态" align="center" prop="bindingStatus">
<template #default="scope">
<dict-tag :options="is_used" :value="scope.row.bindingStatus" />
</template>
</el-table-column>
<el-table-column label="绑定数量" align="center" prop="bindingQuantity" /> <el-table-column label="绑定数量" align="center" prop="bindingQuantity" />
<el-table-column label="绑定单位" align="center" prop="bindingUnit" /> <el-table-column label="绑定单位" align="center" prop="bindingUnit" />
<el-table-column label="绑定时间" align="center" prop="bindTime" width="180"> <el-table-column label="绑定时间" align="center" prop="bindTime" width="180">
...@@ -201,40 +73,15 @@ ...@@ -201,40 +73,15 @@
<span>{{ parseTime(scope.row.bindTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.bindTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="绑定人ID" align="center" prop="binderId" /> <el-table-column label="绑定人" align="center" prop="binderUser.nickName" />
<el-table-column label="绑定设备ID" align="center" prop="bindDeviceId" />
<el-table-column label="解绑时间" align="center" prop="unbindTime" width="180"> <el-table-column label="解绑时间" align="center" prop="unbindTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.unbindTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.unbindTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="解绑人ID" align="center" prop="unbinderId" /> <el-table-column label="解绑人" align="center" prop="unbinderUser.nickName" />
<el-table-column label="解绑原因" align="center" prop="unbindReason" /> <el-table-column label="解绑原因" align="center" prop="unbindReason" />
<el-table-column label="有效期开始时间" align="center" prop="validStartTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.validStartTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="有效期结束时间" align="center" prop="validEndTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.validEndTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="是否永久有效" align="center" prop="isPermanent" />
<el-table-column label="当前位置ID" align="center" prop="currentLocationId" />
<el-table-column label="最后位置ID" align="center" prop="lastLocationId" />
<el-table-column label="最后移动时间" align="center" prop="lastMoveTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.lastMoveTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['ware:wmsRfidBinding:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['ware:wmsRfidBinding:remove']">删除</el-button>
</template>
</el-table-column>
</el-table> </el-table>
<pagination <pagination
...@@ -245,6 +92,14 @@ ...@@ -245,6 +92,14 @@
@pagination="getList" @pagination="getList"
/> />
<!-- 物资选择对话框 -->
<MaterialSelectDialog
ref="materialSelectDialogRef"
v-model:visible="materialSelectVisible"
@confirm="handleMaterialConfirm"
@cancel="handleMaterialCancel"
/>
<!-- 添加或修改RFID标签绑定记录对话框 --> <!-- 添加或修改RFID标签绑定记录对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body> <el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="wmsRfidBindingRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="wmsRfidBindingRef" :model="form" :rules="rules" label-width="80px">
...@@ -343,9 +198,10 @@ ...@@ -343,9 +198,10 @@
<script setup name="WmsRfidBinding"> <script setup name="WmsRfidBinding">
import { listWmsRfidBinding, getWmsRfidBinding, delWmsRfidBinding, addWmsRfidBinding, updateWmsRfidBinding } from "@/api/ware/wmsRfidBinding" import { listWmsRfidBinding, getWmsRfidBinding, delWmsRfidBinding, addWmsRfidBinding, updateWmsRfidBinding } from "@/api/ware/wmsRfidBinding"
import MaterialSelectDialog from '@/components/MaterialSelectDialog.vue'
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const {rfidtag_type,is_used} = proxy.useDict("rfidtag_type", "is_used")
const wmsRfidBindingList = ref([]) const wmsRfidBindingList = ref([])
const open = ref(false) const open = ref(false)
const loading = ref(true) const loading = ref(true)
...@@ -356,6 +212,10 @@ const multiple = ref(true) ...@@ -356,6 +212,10 @@ const multiple = ref(true)
const total = ref(0) const total = ref(0)
const title = ref("") const title = ref("")
// 物资选择对话框
const materialSelectVisible = ref(false)
const materialSelectDialogRef = ref(null)
const data = reactive({ const data = reactive({
form: {}, form: {},
queryParams: { queryParams: {
...@@ -363,6 +223,7 @@ const data = reactive({ ...@@ -363,6 +223,7 @@ const data = reactive({
pageSize: 10, pageSize: 10,
cardId: null, cardId: null,
materialId: null, materialId: null,
materialName: '',
inventoryId: null, inventoryId: null,
batchNo: null, batchNo: null,
bindingType: null, bindingType: null,
...@@ -461,6 +322,7 @@ function handleQuery() { ...@@ -461,6 +322,7 @@ function handleQuery() {
/** 重置按钮操作 */ /** 重置按钮操作 */
function resetQuery() { function resetQuery() {
proxy.resetForm("queryRef") proxy.resetForm("queryRef")
queryParams.value.materialName = ''
handleQuery() handleQuery()
} }
...@@ -528,5 +390,26 @@ function handleExport() { ...@@ -528,5 +390,26 @@ function handleExport() {
}, `wmsRfidBinding_${new Date().getTime()}.xlsx`) }, `wmsRfidBinding_${new Date().getTime()}.xlsx`)
} }
/** 物资选择按钮操作 */
function handleMaterialSelect() {
materialSelectVisible.value = true
materialSelectDialogRef.value?.handleQuery()
}
/** 物资选择确认 */
function handleMaterialConfirm(materials) {
if (materials && materials.length > 0) {
const selectedMaterial = materials[0]
queryParams.value.materialId = selectedMaterial.materialId
queryParams.value.materialName = selectedMaterial.materialName
materialSelectVisible.value = false
}
}
/** 物资选择取消 */
function handleMaterialCancel() {
materialSelectVisible.value = false
}
getList() getList()
</script> </script>
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="EPC编码" prop="epcCode"> <el-form-item label="EPC编码" prop="epcCode" label-width="80px">
<el-input <el-input
v-model="queryParams.epcCode" v-model="queryParams.epcCode"
placeholder="请输入EPC编码" placeholder="请输入EPC编码"
...@@ -25,14 +25,6 @@ ...@@ -25,14 +25,6 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="绑定物资ID" prop="materialId">
<el-input
v-model="queryParams.materialId"
placeholder="请输入绑定物资ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="批次号" prop="batchNo"> <el-form-item label="批次号" prop="batchNo">
<el-input <el-input
v-model="queryParams.batchNo" v-model="queryParams.batchNo"
...@@ -41,14 +33,6 @@ ...@@ -41,14 +33,6 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="库存ID" prop="inventoryId">
<el-input
v-model="queryParams.inventoryId"
placeholder="请输入库存ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="绑定时间" prop="bindTime"> <el-form-item label="绑定时间" prop="bindTime">
<el-date-picker clearable <el-date-picker clearable
v-model="queryParams.bindTime" v-model="queryParams.bindTime"
...@@ -57,38 +41,6 @@ ...@@ -57,38 +41,6 @@
placeholder="请选择绑定时间"> placeholder="请选择绑定时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="绑定人" prop="binderId">
<el-input
v-model="queryParams.binderId"
placeholder="请输入绑定人"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="解绑时间" prop="unbindTime">
<el-date-picker clearable
v-model="queryParams.unbindTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择解绑时间">
</el-date-picker>
</el-form-item>
<el-form-item label="最后读取时间" prop="lastReadTime">
<el-date-picker clearable
v-model="queryParams.lastReadTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择最后读取时间">
</el-date-picker>
</el-form-item>
<el-form-item label="最后读取设备" prop="lastReadDevice">
<el-input
v-model="queryParams.lastReadDevice"
placeholder="请输入最后读取设备"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
...@@ -125,35 +77,30 @@ ...@@ -125,35 +77,30 @@
v-hasPermi="['ware:wmsRfidTag:remove']" v-hasPermi="['ware:wmsRfidTag:remove']"
>删除</el-button> >删除</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['ware:wmsRfidTag:export']"
>导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="wmsRfidTagList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="wmsRfidTagList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="标签ID" align="center" prop="tagId" />
<el-table-column label="标签编码" align="center" prop="tagCode" /> <el-table-column label="标签编码" align="center" prop="tagCode" />
<el-table-column label="EPC编码" align="center" prop="epcCode" /> <el-table-column label="EPC编码" align="center" prop="epcCode" />
<el-table-column label="TID编码" align="center" prop="tidCode" /> <el-table-column label="TID编码" align="center" prop="tidCode" />
<el-table-column label="绑定物资ID" align="center" prop="materialId" />
<el-table-column label="批次号" align="center" prop="batchNo" /> <el-table-column label="批次号" align="center" prop="batchNo" />
<el-table-column label="库存ID" align="center" prop="inventoryId" /> <el-table-column label="标签类型" align="center" prop="tagType">
<el-table-column label="标签类型" align="center" prop="tagType" /> <template #default="scope">
<el-table-column label="标签状态" align="center" prop="tagStatus" /> <dict-tag :options="rfidtag_type" :value="scope.row.tagType" />
</template>
</el-table-column>
<el-table-column label="标签状态" align="center" prop="tagStatus">
<template #default="scope">
<dict-tag :options="is_used" :value="scope.row.tagStatus" />
</template>
</el-table-column>
<el-table-column label="绑定时间" align="center" prop="bindTime" width="180"> <el-table-column label="绑定时间" align="center" prop="bindTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.bindTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.bindTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="绑定人" align="center" prop="binderId" />
<el-table-column label="解绑时间" align="center" prop="unbindTime" width="180"> <el-table-column label="解绑时间" align="center" prop="unbindTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.unbindTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.unbindTime, '{y}-{m}-{d}') }}</span>
...@@ -164,12 +111,11 @@ ...@@ -164,12 +111,11 @@
<span>{{ parseTime(scope.row.lastReadTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.lastReadTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="最后读取设备" align="center" prop="lastReadDevice" />
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['ware:wmsRfidTag:edit']">修改</el-button> <el-button v-if="scope.row.tagStatus === '0'" link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['ware:wmsRfidTag:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['ware:wmsRfidTag:remove']">删除</el-button> <el-button v-if="scope.row.tagStatus === '0'" link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['ware:wmsRfidTag:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -194,44 +140,10 @@ ...@@ -194,44 +140,10 @@
<el-form-item label="TID编码" prop="tidCode"> <el-form-item label="TID编码" prop="tidCode">
<el-input v-model="form.tidCode" placeholder="请输入TID编码" /> <el-input v-model="form.tidCode" placeholder="请输入TID编码" />
</el-form-item> </el-form-item>
<el-form-item label="绑定物资ID" prop="materialId"> <el-form-item label="标签类型" prop="tagType">
<el-input v-model="form.materialId" placeholder="请输入绑定物资ID" /> <el-select v-model="form.tagType" placeholder="请选择标签类型">
</el-form-item> <el-option v-for="item in rfidtag_type" :key="item.value" :label="item.label" :value="item.value" />
<el-form-item label="批次号" prop="batchNo"> </el-select>
<el-input v-model="form.batchNo" placeholder="请输入批次号" />
</el-form-item>
<el-form-item label="库存ID" prop="inventoryId">
<el-input v-model="form.inventoryId" placeholder="请输入库存ID" />
</el-form-item>
<el-form-item label="绑定时间" prop="bindTime">
<el-date-picker clearable
v-model="form.bindTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择绑定时间">
</el-date-picker>
</el-form-item>
<el-form-item label="绑定人" prop="binderId">
<el-input v-model="form.binderId" placeholder="请输入绑定人" />
</el-form-item>
<el-form-item label="解绑时间" prop="unbindTime">
<el-date-picker clearable
v-model="form.unbindTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择解绑时间">
</el-date-picker>
</el-form-item>
<el-form-item label="最后读取时间" prop="lastReadTime">
<el-date-picker clearable
v-model="form.lastReadTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择最后读取时间">
</el-date-picker>
</el-form-item>
<el-form-item label="最后读取设备" prop="lastReadDevice">
<el-input v-model="form.lastReadDevice" placeholder="请输入最后读取设备" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
...@@ -252,6 +164,8 @@ import { listWmsRfidTag, getWmsRfidTag, delWmsRfidTag, addWmsRfidTag, updateWmsR ...@@ -252,6 +164,8 @@ import { listWmsRfidTag, getWmsRfidTag, delWmsRfidTag, addWmsRfidTag, updateWmsR
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const {rfidtag_type,is_used} = proxy.useDict("rfidtag_type", "is_used")
const wmsRfidTagList = ref([]) const wmsRfidTagList = ref([])
const open = ref(false) const open = ref(false)
const loading = ref(true) const loading = ref(true)
...@@ -285,6 +199,9 @@ const data = reactive({ ...@@ -285,6 +199,9 @@ const data = reactive({
tagCode: [ tagCode: [
{ required: true, message: "标签编码不能为空", trigger: "blur" } { required: true, message: "标签编码不能为空", trigger: "blur" }
], ],
tagType: [
{ required: true, message: "标签类型不能为空", trigger: "change" }
],
} }
}) })
...@@ -316,7 +233,7 @@ function reset() { ...@@ -316,7 +233,7 @@ function reset() {
materialId: null, materialId: null,
batchNo: null, batchNo: null,
inventoryId: null, inventoryId: null,
tagType: null, tagType: '0', // 标签类型:0-柔性标签,1-抗金属标签
tagStatus: null, tagStatus: null,
bindTime: null, bindTime: null,
binderId: null, binderId: null,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment