From 60e36c367ccfb6382b29f02df97bebca76351235 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: Wed, 14 Aug 2024 17:30:08 +0800
Subject: [PATCH] 提交
---
src/views/hazardousChemicals/accessRecords/index.vue | 4
src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue | 53 +++
src/views/hazardousChemicals/systemManage/user/components/userDialog.vue | 23 +
src/views/hazardousChemicals/electronicWarehouse/components/productTable.vue | 8
src/views/hazardousChemicals/traceableQuery/index.vue | 53 +++
src/views/components/flowDetail.vue | 220 +++++++++++++++
src/views/hazardousChemicals/warehouseManage/components/printCode.vue | 72 +++-
src/views/hazardousChemicals/accessRecords/components/rawTable.vue | 189 +++++++++++++
src/api/hazardousChemicals/productRecord.js | 32 ++
src/api/hazardousChemicals/rawRecord.js | 42 +++
src/views/hazardousChemicals/accessRecords/components/productTable.vue | 40 ++
src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue | 41 ++
src/views/hazardousChemicals/electronicWarehouse/index.vue | 6
src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue | 53 +++
14 files changed, 762 insertions(+), 74 deletions(-)
diff --git a/src/api/hazardousChemicals/productRecord.js b/src/api/hazardousChemicals/productRecord.js
index da982c9..6b264d6 100644
--- a/src/api/hazardousChemicals/productRecord.js
+++ b/src/api/hazardousChemicals/productRecord.js
@@ -61,3 +61,35 @@
params: params
})
}
+
+export function getProList(params) {
+ return request({
+ url: '/product/productCollect',
+ method: 'get',
+ params: params
+ })
+}
+
+export function disCardPro(data) {
+ return request({
+ url: '/product/productDiscard/' + data,
+ method: 'post',
+ })
+}
+
+
+export function getAllProFlow(params) {
+ return request({
+ url: '/product-flow/getAllProductFlowByProductId',
+ method: 'get',
+ params: params
+ })
+}
+
+export function getFlowByCode(params) {
+ return request({
+ url: '/hazmat-flow/getHazmatFlowByCode',
+ method: 'get',
+ params: params
+ })
+}
diff --git a/src/api/hazardousChemicals/rawRecord.js b/src/api/hazardousChemicals/rawRecord.js
index 5226964..593b58d 100644
--- a/src/api/hazardousChemicals/rawRecord.js
+++ b/src/api/hazardousChemicals/rawRecord.js
@@ -53,3 +53,45 @@
params: params
})
}
+
+
+export function getRawFlow(params) {
+ return request({
+ url: '/hazmat-flow/list',
+ method: 'get',
+ params: params
+ })
+}
+
+export function getRawList(params) {
+ return request({
+ url: '/hazmat/hazmatCollect',
+ method: 'get',
+ params: params
+ })
+}
+
+export function disCardRaw(data) {
+ return request({
+ url: '/hazmat/hazmatDiscard/' + data,
+ method: 'post',
+ })
+}
+
+export function getAllRawFlow(params) {
+ return request({
+ url: '/hazmat-flow/getAllHazmatFlowByHazmatId',
+ method: 'get',
+ params: params
+ })
+}
+
+export function getAllRawFlowByFlowId(params) {
+ return request({
+ url: '/hazmat-flow/getAllHazmatFlowById',
+ method: 'get',
+ params: params
+ })
+}
+
+
diff --git a/src/views/components/flowDetail.vue b/src/views/components/flowDetail.vue
new file mode 100644
index 0000000..a49ca9d
--- /dev/null
+++ b/src/views/components/flowDetail.vue
@@ -0,0 +1,220 @@
+<template>
+ <div class="notice">
+ <div v-if="state.dataList.length>0">
+ <div class="title">
+ <span style="margin-right: 5px">{{state.form.name}}( {{state.form.productSn}} )</span>
+ <span>二维码识别号:{{state.form.code}} </span>
+ </div>
+ <div class="content" >
+ <el-timeline style="max-width: 600px">
+ <el-timeline-item
+ v-for="(item, index) in state.dataList"
+ :key="index"
+ :icon="item.icon"
+ :type="item.type"
+ :color="item.color"
+ :size="item.size"
+ :hollow="item.hollow"
+ >
+ {{ item.description }}
+ <span style="color: #03752e" v-if="item.num > 0">{{item.num >0 ? '+' + item.num: item.num}}{{item.unit}}</span>
+ <span style="color: #f6828e" v-else>{{item.num}}{{item.unit}}</span>
+ </el-timeline-item>
+ </el-timeline>
+ </div>
+ </div>
+ <div v-else>
+ <el-empty description="暂无数据" />
+ </div>
+ </div>
+</template>
+<script setup>
+import {onUnmounted, reactive, ref, toRefs} from 'vue'
+import {getAllRawFlow, getRawFlow} from "@/api/hazardousChemicals/rawRecord";
+import {ElMessage} from "element-plus";
+import {getAllProFlow, getFlowByCode} from "@/api/hazardousChemicals/productRecord";
+import { MoreFilled } from '@element-plus/icons-vue'
+const busRef = ref();
+const length = ref()
+const title = ref('')
+const state = reactive({
+ form: {
+ id: '',
+ name: '',
+ productSn: '',
+ code: ''
+ },
+ dataList: [],
+ active: null
+})
+
+
+const openDialog = async (type, value) => {
+ title.value = type;
+ if(type === 'code'){
+ state.form.code = value
+ }else {
+ state.form = value
+ }
+
+ await getAllFlow()
+}
+
+const getAllFlow = async () => {
+ if(title.value == 'pro' || title.value =='proRecord'){
+ let param = {}
+ if(title.value == 'pro'){
+ param = {
+ productId: state.form.id
+ }
+ }else {
+ param = {
+ productId: state.form.productId
+ }
+ }
+ const res = await getAllProFlow(param)
+ if(res.code == 200){
+ if(res.data && res.data.length>0) {
+ state.dataList = res.data.map(item => {
+ return {
+ ...item,
+ unit: item.productBasic.unit,
+ description: `${item.updateTime} ${item.user.departName}部门 ${item.user.name} 进行了 ${item.state == 0 ? '批量导入' : item.state == 3 ? '标签作废' : '销售'}`,
+ size: 'large',
+ type: 'primary',
+ icon: MoreFilled,
+ }
+ })
+ state.form.name = res.data[0].productBasic.name
+ state.form.productSn = res.data[0].productBasic.productSn
+ state.form.code = res.data[0].code
+ console.log("state.dataList", state.dataList)
+ }else {
+ state.dataList=[]
+ }
+ }else{
+ ElMessage.warning(res.message)
+ }
+ }else if(title.value == 'raw' || title.value =='rawRecord'){
+ let param = {}
+ if(title.value == 'raw'){
+ param = {
+ hazmatId: state.form.id
+ }
+ }else {
+ param = {
+ hazmatId: state.form.hazmatId
+ }
+ }
+ const res = await getAllRawFlow(param)
+ if(res.code == 200){
+ if(res.data && res.data.length>0){
+ state.dataList = res.data.map(item => {
+ return {
+ ...item,
+ unit:item.hazmatBasic.unit,
+ description: `${item.updateTime} ${item.user.departName}部门 ${item.user.name} 进行了 ${item.state ==0?'批量导入': item.state ==1?'取用' :item.state ==2?'归还':item.state ==3?'标签作废' :''}`,
+ size: 'large',
+ type: 'primary',
+ icon: MoreFilled,
+ }
+ })
+ state.form.name = res.data[0].hazmatBasic.name
+ state.form.productSn = res.data[0].hazmatBasic.productSn
+ state.form.code = res.data[0].code
+ console.log("state.dataList",state.dataList)
+ }else {
+ state.dataList = []
+ }
+ }else{
+ ElMessage.warning(res.message)
+ }
+ }else if(title.value == 'code'){
+ const param = {
+ code: state.form.code
+ }
+ const res = await getFlowByCode(param)
+ if(res.code == 200){
+ if(res.data && res.data.length>0){
+ if(res.data[0].hazmatBasic){
+ state.dataList = res.data.map(item => {
+ return {
+ ...item,
+ unit:item.hazmatBasic.unit,
+ description: `${item.updateTime} ${item.user.departName}部门 ${item.user.name} 进行了 ${item.state ==0?'批量导入': item.state ==1?'取用' :item.state ==2?'归还':item.state ==3?'标签作废' :''}`,
+ size: 'large',
+ type: 'primary',
+ icon: MoreFilled,
+ }
+ })
+ state.form.name = res.data[0].hazmatBasic.name
+ state.form.productSn = res.data[0].hazmatBasic.productSn
+ state.form.code = res.data[0].code
+ console.log("state.dataList",state.dataList)
+ }else {
+ state.dataList = res.data.map(item => {
+ return {
+ ...item,
+ unit:item.productBasic.unit,
+ description: `${item.updateTime} ${item.user.departName}部门 ${item.user.name} 进行了 ${item.state == 0 ? '批量导入' : item.state == 3 ? '标签作废' : '销售'}`,
+ size: 'large',
+ type: 'primary',
+ icon: MoreFilled,
+ }
+ })
+ state.form.name = res.data[0].productBasic.name
+ state.form.productSn = res.data[0].productBasic.productSn
+ state.form.code = res.data[0].code
+ console.log("state.dataList",state.dataList)
+ }
+
+ }else {
+ state.dataList = []
+ }
+ }else{
+ ElMessage.warning(res.message)
+ }
+ }
+}
+onUnmounted(()=>{
+ state.form = {
+ id: '',
+ name: '',
+ productSn: '',
+ code: ''
+ }
+ state.dataList = []
+})
+
+defineExpose({
+ openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+ padding: 20px;
+ display: flex;
+ flex-direction: column;
+ .title{
+ display: flex;
+ align-items: center;
+ font-size: 18px;
+ font-weight: 600;
+ }
+ .content{
+ margin-top: 40px;
+
+ :deep(.el-timeline) {
+ font-size: 16px;
+ }
+ :deep(.el-timeline-item__node--large) {
+ left: -8px;
+ width: 25px;
+ height: 25px;
+ top: -5px;
+ }
+ }
+}
+</style>
diff --git a/src/views/hazardousChemicals/accessRecords/components/productTable.vue b/src/views/hazardousChemicals/accessRecords/components/productTable.vue
index a921cfa..82179ae 100644
--- a/src/views/hazardousChemicals/accessRecords/components/productTable.vue
+++ b/src/views/hazardousChemicals/accessRecords/components/productTable.vue
@@ -24,22 +24,25 @@
<!-- 表格数据 -->
<el-table v-loading="loading" :data="dataList" :border="true">
<el-table-column label="序号" type="index" align="center" width="80" />
- <el-table-column label="流转时间" prop="updateTime" align="center" />
+ <el-table-column label="流转时间" prop="updateTime" align="center" width="120"/>
<el-table-column label="品名" prop="productBasic.name" align="center" />
<el-table-column label="产品编号" prop="productBasic.productSn" align="center" />
- <el-table-column label="二维码识别号" prop="productBasic.code" align="center" />
+ <el-table-column label="二维码识别号" prop="code" align="center" />
<el-table-column label="类型" prop="productBasic.productSn" align="center" >
<template #default="scope">
<span>{{scope.row.state === 0 ? '入库' :scope.row.state === 3 ? '标签作废' :scope.row.state === 4 ? '销售' : ''}}</span>
-
</template>
</el-table-column>
- <el-table-column label="数量" prop="batchNo" align="center" width="120" />
- <el-table-column label="操作人" prop="batchNo" align="center" width="120" />
+ <el-table-column label="数量" prop="num" align="center" width="120" >
+ <template #default="scope">
+ <span>{{scope.row.num}}{{scope.row.productBasic.unit}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作人" prop="user.name" align="center" width="120" />
<el-table-column label="人员所在部门" prop="user.departName" align="center" width="120" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" >
<template #default="scope">
- <el-button link type="primary" >查看完整记录</el-button>
+ <el-button link type="primary" @click="viewFlow(scope.row)">查看完整记录</el-button>
</template>
</el-table-column>
</el-table>
@@ -51,12 +54,22 @@
@pagination="getList"
/>
+ <el-dialog
+ v-model="dialogVisible"
+ width="600px"
+ :before-close="handleClose"
+ :close-on-press-escape="false"
+ :close-on-click-modal="false"
+ >
+ <flow-deail ref="flowRef"></flow-deail>
+ </el-dialog>
</div>
</template>
<script setup>
-import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
+import {getCurrentInstance, nextTick, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
import {ElMessage, ElMessageBox} from "element-plus";
+import flowDeail from '../../../components/flowDetail.vue'
import {delWarehouse, getWarehouse} from "@/api/hazardousChemicals/warehouse";
import {
delProductRecord,
@@ -69,6 +82,8 @@
const loading = ref(false);
const dialogRef = ref();
const codeRef = ref();
+const flowRef = ref();
+const dialogVisible = ref()
const data = reactive({
queryParams: {
pageNum: 1,
@@ -155,6 +170,17 @@
codeRef.value.openDialog('pro',val);
}
+
+const handleClose = () => {
+ dialogVisible.value = false
+}
+const viewFlow = (val) => {
+ dialogVisible.value = true
+ nextTick(() => {
+ flowRef.value.openDialog('proRecord',val)
+ })
+
+}
defineExpose({
getList
});
diff --git a/src/views/hazardousChemicals/accessRecords/components/rawTable.vue b/src/views/hazardousChemicals/accessRecords/components/rawTable.vue
new file mode 100644
index 0000000..e067075
--- /dev/null
+++ b/src/views/hazardousChemicals/accessRecords/components/rawTable.vue
@@ -0,0 +1,189 @@
+<template>
+ <div class="app-container">
+ <div style="display: flex;justify-content: space-between">
+ <el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" >
+ <el-form-item label="品名:" >
+ <el-input v-model="data.queryParams.name" placeholder="请输入品名" clearable></el-input>
+ </el-form-item>
+ <el-form-item label="产品编号:" >
+ <el-input v-model="data.queryParams.productSn" placeholder="请输入产品编号" clearable></el-input>
+ </el-form-item>
+ <el-form-item >
+ <el-button
+ type="primary"
+ @click="getList"
+ >查询</el-button>
+ <el-button
+ type="primary"
+ plain
+ @click="reset"
+ >重置</el-button>
+ </el-form-item>
+ </el-form>
+ </div>
+ <!-- 表格数据 -->
+ <el-table v-loading="loading" :data="dataList" :border="true">
+ <el-table-column label="序号" type="index" align="center" width="80" />
+ <el-table-column label="流转时间" prop="updateTime" align="center" width="120"/>
+ <el-table-column label="品名" prop="hazmatBasic.name" align="center" />
+ <el-table-column label="产品编号" prop="hazmatBasic.productSn" align="center" />
+ <el-table-column label="二维码识别号" prop="code" align="center" />
+ <el-table-column label="类型" prop="hazmatBasic.productSn" align="center" >
+ <template #default="scope">
+ <span>{{scope.row.state === 0 ? '入库' :scope.row.state === 1 ? '取用' :scope.row.state === 2 ? '归还' : scope.row.state === 3? '标签作废':''}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="数量" prop="num" align="center" width="120" >
+ <template #default="scope">
+ <span>{{scope.row.num}}{{scope.row.hazmatBasic.unit}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作人" prop="user.name" align="center" width="120" />
+ <el-table-column label="人员所在部门" prop="user.departName" align="center" width="120" />
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" >
+ <template #default="scope">
+ <el-button link type="primary" @click="viewFlow(scope.row)" >查看完整记录</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ v-model:page="queryParams.pageNum"
+ v-model:limit="queryParams.pageSize"
+ @pagination="getList"
+ />
+ <el-dialog
+ v-model="dialogVisible"
+ width="600px"
+ :before-close="handleClose"
+ :close-on-press-escape="false"
+ :close-on-click-modal="false"
+ >
+ <flow-deail ref="flowRef"></flow-deail>
+ </el-dialog>
+
+ </div>
+</template>
+
+<script setup>
+import {getCurrentInstance, nextTick, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
+import {ElMessage, ElMessageBox} from "element-plus";
+import flowDeail from '../../../components/flowDetail.vue'
+const router = useRouter()
+const route = useRoute()
+import {
+ delRawRecord,
+ doEntryRaw,
+ getRawFlow,
+ getRawRecord,
+ getRawWarehouseRecord
+} from "@/api/hazardousChemicals/rawRecord";
+import {useRoute, useRouter} from "vue-router";
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const dialogRef = ref();
+const dialogVisible = ref()
+const flowRef = ref();
+const codeRef = ref();
+const data = reactive({
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ name: '',
+ productSn: ''
+ },
+ total: 0,
+ dataList: []
+});
+
+const { queryParams, total, dataList } = toRefs(data);
+const classHourRef = ref();
+onMounted(()=>{
+ if(route.query.val){
+ const val = JSON.parse(route.query.val)
+ if(val){
+ data.queryParams.pageNum = val.pageNum;
+ data.queryParams.pageSize = val.pageSize;
+ }
+ }
+ getList()
+})
+
+const getList = async () => {
+ loading.value = true
+ const res = await getRawFlow(data.queryParams)
+ if(res.code == 200){
+ data.dataList = res.data.list
+ data.total = res.data.total
+ }else{
+ ElMessage.warning(res.message)
+ }
+ loading.value = false
+}
+
+const openDialog = (type, value) => {
+ dialogRef.value.openDialog(type, value);
+}
+
+/** 重置新增的表单以及其他数据 */
+function reset() {
+ data.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ name: '',
+ productSn: ''
+ }
+ getList()
+}
+const handleDelete = (val) => {
+ ElMessageBox.confirm(
+ '确定删除此条数据?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await delRawRecord(val.id)
+ if(res.code == 200){
+ ElMessage.success('数据删除成功')
+ await getList()
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+
+const toDetail = (val) => {
+ const obj = {
+ pageNum: data.queryParams.pageNum,
+ pageSize: data.queryParams.pageSize,
+ basicId: val.basicId,
+ warehouseId: val.warehouseId
+ }
+ const v = JSON.stringify(obj)
+ router.push({ path: "/rawDetail", query: { val: v } });
+}
+
+const handleClose = () => {
+ dialogVisible.value = false
+}
+const viewFlow = (val) => {
+ dialogVisible.value = true
+ nextTick(() => {
+ flowRef.value.openDialog('rawRecord',val)
+ })
+
+}
+const getProRecord = (val) => {
+ dialogRef.value.openDialog(val)
+}
+
+defineExpose({
+ getList
+});
+
+</script>
diff --git a/src/views/hazardousChemicals/accessRecords/index.vue b/src/views/hazardousChemicals/accessRecords/index.vue
index 807c53b..114e99c 100644
--- a/src/views/hazardousChemicals/accessRecords/index.vue
+++ b/src/views/hazardousChemicals/accessRecords/index.vue
@@ -5,7 +5,7 @@
<pro-table ref="proRef"></pro-table>
</el-tab-pane>
<el-tab-pane label="原材料" name="rawMaterial">
-<!-- <raw-table ref="rawRef"></raw-table>-->
+ <raw-table ref="rawRef"></raw-table>
</el-tab-pane>
</el-tabs>
</div>
@@ -14,7 +14,7 @@
<script setup>
import {onMounted, reactive, ref} from "vue";
import proTable from './components/productTable.vue'
-// import rawTable from './components/rawTable.vue'
+import rawTable from './components/rawTable.vue'
const showFinishPro = ref(false)
const proRef = ref()
const rawRef = ref()
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue b/src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue
index b807bc3..aa3c01c 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue
@@ -66,7 +66,8 @@
<el-table-column label="所在仓库" prop="warehouseName" align="center" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180" >
<template #default="scope">
- <el-button link type="primary" >取用记录</el-button>
+ <el-button link type="primary" @click="viewFlow(scope.row)">取用记录</el-button>
+ <el-button link type="danger" v-if="scope.row.state === 0" @click="disCard(scope.row)">标签作废</el-button>
<el-button link type="primary" @click="viewQR(scope.row)">查看二维码</el-button>
</template>
</el-table-column>
@@ -79,19 +80,32 @@
@pagination="getList"
/>
<viewQRcode ref="dialogRef" @getList="getList"></viewQRcode>
+ <el-dialog
+ v-model="dialogVisible"
+ width="600px"
+ :before-close="handleClose"
+ :close-on-press-escape="false"
+ :close-on-click-modal="false"
+ >
+ <flow-deail ref="flowRef"></flow-deail>
+ </el-dialog>
</div>
</template>
<script setup>
-import {onMounted, reactive, ref} from "vue";
+import {nextTick, onMounted, reactive, ref} from "vue";
import {useRoute, useRouter} from "vue-router";
-import {getProDetail, getProductRecord} from "@/api/hazardousChemicals/productRecord";
+import flowDeail from '../../../components/flowDetail.vue'
+import {disCardPro, doEntryPro, getProDetail, getProductRecord} from "@/api/hazardousChemicals/productRecord";
import viewQRcode from './viewQR.vue'
-import {ElMessage} from "element-plus";
+import {ElMessage, ElMessageBox} from "element-plus";
import Cookies from "js-cookie";
const route = useRoute()
const router = useRouter();
const dialogRef = ref();
+const flowRef = ref();
+
+const dialogVisible = ref(false)
const data = reactive({
queryParams: {
basicId: null,
@@ -165,7 +179,38 @@
const viewQR = (val) => {
dialogRef.value.openDialog('pro',val)
}
+const disCard = async (val) => {
+ ElMessageBox.confirm(
+ '确定作废该标签?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await disCardPro(val.id)
+ if(res.code == 200){
+ ElMessage.success('操作成功')
+ await getList()
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+
+}
+const handleClose = () => {
+ dialogVisible.value = false
+}
+const viewFlow = (val) => {
+ dialogVisible.value = true
+ nextTick(() => {
+
+ flowRef.value.openDialog('pro',val)
+ })
+
+}
</script>
<style scoped lang="scss">
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/productTable.vue b/src/views/hazardousChemicals/electronicWarehouse/components/productTable.vue
index 5133541..084c11c 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/productTable.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/productTable.vue
@@ -36,10 +36,8 @@
</template>
</el-table-column>
<el-table-column label="批号" prop="batchNo" align="center" width="120" />
+ <el-table-column label="当前库存" prop="stock" align="center" width="120" />
<el-table-column label="所在仓库" prop="warehouseName" align="center" >
- <template #default="scope">
- <span>{{scope.row.warehouse.name}}</span>
- </template>
</el-table-column>
<el-table-column label="状态" prop="state" align="center">
<template #default="scope">
@@ -72,7 +70,7 @@
import {
delProductRecord,
doEntryPro,
- getProductRecord,
+ getProductRecord, getProList,
getProWarehouseRecord
} from "@/api/hazardousChemicals/productRecord";
import {delRawRecord} from "@/api/hazardousChemicals/rawRecord";
@@ -109,7 +107,7 @@
const getList = async () => {
loading.value = true
- const res = await getProductRecord(data.queryParams)
+ const res = await getProList(data.queryParams)
if(res.code == 200){
data.dataList = res.data.list
data.total = res.data.total
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue b/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue
index e9212a0..ade8b00 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue
@@ -66,7 +66,8 @@
<el-table-column label="所在仓库" prop="warehouseName" align="center" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180" >
<template #default="scope">
- <el-button link type="primary" >取用记录</el-button>
+ <el-button link type="primary" @click="viewFlow(scope.row)">取用记录</el-button>
+ <el-button link type="danger" v-if="scope.row.state === 0 || scope.row.state === 1|| scope.row.state === 2" @click="disCard(scope.row)">标签作废</el-button>
<el-button link type="primary" @click="viewQR(scope.row)">查看二维码</el-button>
</template>
</el-table-column>
@@ -79,20 +80,32 @@
@pagination="getList"
/>
<viewQRcode ref="dialogRef" @getList="getList"></viewQRcode>
+ <el-dialog
+ v-model="dialogVisible"
+ width="600px"
+ :before-close="handleClose"
+ :close-on-press-escape="false"
+ :close-on-click-modal="false"
+ >
+ <flow-deail ref="flowRef"></flow-deail>
+ </el-dialog>
</div>
</template>
<script setup>
-import {onMounted, reactive, ref} from "vue";
+import {nextTick, onMounted, reactive, ref} from "vue";
import {useRoute, useRouter} from "vue-router";
-import {getProDetail, getProductRecord} from "@/api/hazardousChemicals/productRecord";
+import flowDeail from '../../../components/flowDetail.vue'
+import {disCardPro, getProDetail, getProductRecord} from "@/api/hazardousChemicals/productRecord";
import viewQRcode from './viewQR.vue'
-import {ElMessage} from "element-plus";
-import {getRawDetail} from "@/api/hazardousChemicals/rawRecord";
+import {ElMessage, ElMessageBox} from "element-plus";
+import {disCardRaw, getRawDetail} from "@/api/hazardousChemicals/rawRecord";
import Cookies from "js-cookie";
const route = useRoute()
const router = useRouter();
const dialogRef = ref();
+const dialogVisible = ref(false)
+const flowRef = ref();
const data = reactive({
queryParams: {
basicId: null,
@@ -175,6 +188,36 @@
const viewQR = (val) => {
dialogRef.value.openDialog('raw',val)
}
+const disCard = async (val) => {
+ ElMessageBox.confirm(
+ '确定作废该标签?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await disCardRaw(val.id)
+ if(res.code == 200){
+ ElMessage.success('操作成功')
+ await getList()
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+
+
+}
+const viewFlow = (val) => {
+ dialogVisible.value = true
+ nextTick(() => {
+ flowRef.value.openDialog('raw',val)
+ })
+}
+const handleClose = () => {
+ dialogVisible.value = false
+}
</script>
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue b/src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue
index 4e65c13..6b2befb 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue
@@ -22,7 +22,7 @@
</el-form>
</div>
<!-- 表格数据 -->
- <el-table v-loading="loading" :data="dataList" :border="true">
+ <el-table v-loading="loading" :data="dataList" :border="true" :cell-style="cellStyle">
<el-table-column label="序号" type="index" align="center" width="80" />
<el-table-column label="品名" prop="hazmatBasic.name" align="center" />
<el-table-column label="产品编号" prop="hazmatBasic.productSn" align="center" />
@@ -36,10 +36,10 @@
</template>
</el-table-column>
<el-table-column label="批号" prop="batchNo" align="center" width="120" />
+ <el-table-column label="当前库存" prop="stock" align="center" width="120" />
+ <el-table-column label="不完整归还" prop="missStock" align="center" width="120" />
+ <el-table-column label="安全库存" prop="hazmatBasic.safeNum" align="center" width="120" />
<el-table-column label="所在仓库" prop="warehouseName" align="center" >
- <template #default="scope">
- <span>{{scope.row.warehouse.name}}</span>
- </template>
</el-table-column>
<el-table-column label="状态" prop="state" align="center">
<template #default="scope">
@@ -72,7 +72,13 @@
const router = useRouter()
const route = useRoute()
import rawWarehouseDialog from './rawWarehouseRecord.vue'
-import {delRawRecord, doEntryRaw, getRawRecord, getRawWarehouseRecord} from "@/api/hazardousChemicals/rawRecord";
+import {
+ delRawRecord,
+ doEntryRaw,
+ getRawList,
+ getRawRecord,
+ getRawWarehouseRecord
+} from "@/api/hazardousChemicals/rawRecord";
import {useRoute, useRouter} from "vue-router";
const { proxy } = getCurrentInstance();
const loading = ref(false);
@@ -89,6 +95,7 @@
dataList: []
});
+const selectValue = ref([])
const { queryParams, total, dataList } = toRefs(data);
const classHourRef = ref();
onMounted(()=>{
@@ -104,9 +111,14 @@
const getList = async () => {
loading.value = true
- const res = await getRawRecord(data.queryParams)
+ const res = await getRawList(data.queryParams)
if(res.code == 200){
data.dataList = res.data.list
+ data.dataList.forEach(item => {
+ if(item.stock+item.missStock < item.hazmatBasic.safeNum){
+ selectValue.value.push(item)
+ }
+ })
data.total = res.data.total
}else{
ElMessage.warning(res.message)
@@ -163,6 +175,23 @@
dialogRef.value.openDialog(val)
}
+const cellStyle = ({ row, column,rowIndex, columnIndex }) => {
+ let arr = []
+ if (selectValue.value !== null) {
+ selectValue.value.filter((item, index) => {
+ arr.push(item.basicId)
+ })
+ }
+ for (var i = 0; i <= arr.length; i++) {
+ if (arr[i] == row.basicId) {
+ if (columnIndex === 9 || columnIndex === 10 || columnIndex === 11){
+ return { backgroundColor: '#FFD7CC !important',color:' red' }
+ }
+
+ }
+ }
+};
+
defineExpose({
getList
});
diff --git a/src/views/hazardousChemicals/electronicWarehouse/index.vue b/src/views/hazardousChemicals/electronicWarehouse/index.vue
index e3c43d6..afd3f77 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/index.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/index.vue
@@ -12,7 +12,7 @@
</template>
<script setup>
-import {onMounted, reactive, ref} from "vue";
+import {onMounted, onUnmounted, reactive, ref} from "vue";
import proTable from './components/productTable.vue'
import rawTable from './components/rawTable.vue'
import Cookies from "js-cookie";
@@ -36,6 +36,10 @@
}else{
data.activeName = showFinishPro.value ? 'finishPro' : 'rawMaterial'
}
+
+})
+onUnmounted(()=>{
+ Cookies.remove('type')
})
const clickTab = (tab,event) =>{
console.log('tab',data.activeName)
diff --git a/src/views/hazardousChemicals/systemManage/user/components/userDialog.vue b/src/views/hazardousChemicals/systemManage/user/components/userDialog.vue
index dc47147..50def4c 100644
--- a/src/views/hazardousChemicals/systemManage/user/components/userDialog.vue
+++ b/src/views/hazardousChemicals/systemManage/user/components/userDialog.vue
@@ -41,7 +41,7 @@
</el-form-item>
<el-form-item label="所属企业:" prop="companyName" v-if="state.title !== '修改密码' && state.form.userType !=0">
<el-select
- v-if="state.isAdmin && state.title != '编辑用户'"
+ v-if="state.isAdmin"
clearable
v-model="state.form.companyName"
filterable
@@ -64,9 +64,9 @@
</el-select>
<el-input v-else disabled style="width: 100%" v-model="state.form.companyName"></el-input>
</el-form-item>
- <el-form-item label="所属部门:" prop="departId" v-if="(state.currentUserType == 1 && state.title != '查看用户') || (state.currentUserType == 0 && state.form.userType == 2 && state.title == '编辑用户') ">
+ <el-form-item label="所属部门:" prop="departId" v-if="state.form.userType !=0" >
<el-cascader
- v-if="state.currentUserType == 1 && (state.title == '新增用户' || state.title == '编辑用户')"
+ v-if="(state.currentUserType == 1 ||state.currentUserType == 0) && (state.title == '新增用户' || state.title == '编辑用户')"
style="width: 100%"
ref="classifyRef"
v-model="state.form.departId"
@@ -189,7 +189,7 @@
phone: [{ required: true, validator: validateUserPhone, trigger: 'blur' }],
userType: [{ required: true, message: '请选择用户类型', trigger: 'blur' }],
sex: [{ required: true, message: '请选择性别', trigger: 'blur' }],
- departId:[{ required: true, message: '请选择部门', trigger: 'blur' }],
+ // departId:[{ required: true, message: '请选择部门', trigger: 'blur' }],
},
companyList: [],
deptList: [],
@@ -221,9 +221,6 @@
userInfo.value = JSON.parse(Cookies.get('userInfo'))
console.log("userInfo",userInfo.value)
state.currentUserType = userInfo.value.userType
- if(state.currentUserType == 1){
- await getDeptList()
- }
if(userInfo.value.userType === 0){
state.isAdmin = true;
}else {
@@ -231,6 +228,9 @@
state.form.companyId = userInfo.value.companyId;
state.form.companyName = userInfo.value.companyName;
state.form.userType = 2
+ }
+ if(userInfo.value.userType != 0 || (userInfo.value.userType ==0 && (type =='edit' || state.title =='查看用户'))){
+ await getDeptList()
}
state.title = type === 'add' ? '新增用户' : type ==='edit' ? '编辑用户' : type ==='pwd' ? '修改密码' : '查看用户' ;
if(type === 'edit' || type === 'view') {
@@ -283,7 +283,10 @@
const loadingDept = ref(false)
const getDeptList = async (val)=>{
loadingDept.value = true;
- const res = await getDept()
+ const param = {
+ companyId: state.form.companyId
+ }
+ const res = await getDept(param)
if (res.code == 200) {
loading.value = false;
state.deptList = recursion(res.data)
@@ -386,10 +389,12 @@
dialogVisible.value = false;
}
-const selectValue = (val) => {
+const selectValue = (val) => {
+ state.form.departId = null
state.companyList.forEach(item => {
if(item.name === val){
state.form.companyId = item.id
+ getDeptList();
}
})
}
diff --git a/src/views/hazardousChemicals/traceableQuery/index.vue b/src/views/hazardousChemicals/traceableQuery/index.vue
index cd019e4..c2c67d4 100644
--- a/src/views/hazardousChemicals/traceableQuery/index.vue
+++ b/src/views/hazardousChemicals/traceableQuery/index.vue
@@ -1,28 +1,40 @@
<template>
- <div>
+ <div class="query">
<div style="margin-top:20px;margin-left: 20px">
<el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" >
<el-form-item label="二维码编号:" >
- <el-input v-model="data.form.code" placeholder="请输入二维码编号进行搜索" clearable></el-input>
+ <el-input v-model="data.form.code" placeholder="请输入二维码编号进行搜索"></el-input>
</el-form-item>
<el-form-item >
<el-button
type="primary"
@click="getList"
>查询</el-button>
+ <el-button
+ @click="reset"
+ >重置</el-button>
</el-form-item>
- </el-form>
- <div v-if="data.form.code !=''">
+ </el-form>
+ <div style="display: flex;justify-content: center">
+ <div class="content">
+ <flow-deail ref="flowRef" v-if="data.showData"></flow-deail>
+ <el-empty description="暂无数据" style="margin-top: 10%" v-else></el-empty>
+ </div>
</div>
- <el-empty description="暂无数据" style="margin-top: 10%" v-else></el-empty>
+
+
</div>
</div>
</template>
<script setup>
-import {reactive} from "vue";
+import {nextTick, reactive, ref} from "vue";
+import flowDeail from '../../components/flowDetail.vue'
+import {getFlowByCode, getProFlow} from "@/api/hazardousChemicals/productRecord";
+import {ElMessage} from "element-plus";
+const flowRef = ref();
const data = reactive({
queryParams: {
name: '',
@@ -31,13 +43,36 @@
form: {
code: ''
},
- dataList: []
+ dataList: [],
+ showData:false
});
-const getList = () => {
+const getList = async () => {
+ if(data.form.code!=''){
+ data.showData = true
+ await nextTick(() => {
+ flowRef.value.openDialog('code',data.form.code)
+ })
+ }else {
+ ElMessage.warning('请先输入二维码编号')
+ }
+
+
+}
+const reset = () =>{
+ data.form.code = ''
+ data.showData = false
}
</script>
<style scoped lang="scss">
-
+.query{
+ .content{
+ margin-top: 40px;
+ width: 650px;
+ height: 650px;
+ border: 1px solid black;
+ overflow-y: scroll;
+ }
+}
</style>
diff --git a/src/views/hazardousChemicals/warehouseManage/components/printCode.vue b/src/views/hazardousChemicals/warehouseManage/components/printCode.vue
index 6c776a9..b3ed378 100644
--- a/src/views/hazardousChemicals/warehouseManage/components/printCode.vue
+++ b/src/views/hazardousChemicals/warehouseManage/components/printCode.vue
@@ -45,6 +45,8 @@
import {addWarehouse, checkName, editWarehouse} from "@/api/hazardousChemicals/warehouse";
import {verifyPhone} from "@/utils/validate";
import {checkBasicName} from "@/api/hazardousChemicals/basicInfo";
+import {getProDetail, getProductRecord} from "@/api/hazardousChemicals/productRecord";
+import {getRawDetail} from "@/api/hazardousChemicals/rawRecord";
const dialogVisible = ref(false);
const title = ref("");
@@ -58,7 +60,9 @@
total: 0,
queryParams:{
pageNum: 1,
- pageSize: 5
+ pageSize: 5,
+ warehouseId: null,
+ basicId: null,
},
chooseList: []
@@ -66,30 +70,11 @@
const originalList = ref([])
const openDialog = async (type,value) => {
+ state.queryParams.warehouseId =value.warehouseId
+ state.queryParams.basicId =value.basicId
title.value = type;
- if(type == 'pro'){
- for(let i=value.startCode ; i<=value.endCode;i++){
- const obj = {
- name: value.productBasic.name,
- productSn: value.productBasic.productSn,
- code: value.codePrex+(i+"").padStart(4,'0')
- }
- state.dataList.push(obj)
- }
- }else {
+ await getList()
- for(let i=value.startCode ; i<=value.endCode;i++){
- const obj = {
- name: value.hazmatBasic.name,
- productSn: value.hazmatBasic.productSn,
- code: value.codePrex+(i+"").padStart(4,'0')
- }
- state.dataList.push(obj)
- }
- }
- state.total = state.dataList.length
- originalList.value = state.dataList
- getList()
console.log('state.dataList',state.dataList)
dialogVisible.value = true;
}
@@ -115,13 +100,48 @@
state.dataList = [];
state.queryParams = {
pageNum: 1,
- pageSize: 5
+ pageSize: 5,
+ warehouseId: null,
+ basicId: null,
}
state.total = 0
state.chooseList = []
}
-const getList = () => {
- state.dataList = originalList.value.slice((state.queryParams.pageNum-1) * state.queryParams.pageSize, state.queryParams.pageNum * state.queryParams.pageSize)
+const getList = async () => {
+ if(title.value == 'pro'){
+ const res = await getProDetail(state.queryParams)
+ if(res.code == 200){
+ state.dataList = res.data.list.map(item => {
+ return{
+ ...item,
+ name: item.productBasic.name,
+ productSn: item.productBasic.productSn
+ }
+ })
+ state.total = res.data.total
+ originalList.value = state.dataList
+ }else{
+ ElMessage.warning(res.message)
+ }
+ }else {
+ const res = await getRawDetail(state.queryParams)
+ if(res.code == 200){
+ state.dataList = res.data.list.map(item => {
+ return{
+ ...item,
+ name: item.hazmatBasic.name,
+ productSn: item.hazmatBasic.productSn
+ }
+ })
+ state.total = res.data.total
+ originalList.value = state.dataList
+ }else{
+ ElMessage.warning(res.message)
+ }
+ }
+
+
+
}
const printEvent=() => {
--
Gitblit v1.9.2