From 60e36c367ccfb6382b29f02df97bebca76351235 Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期三, 14 八月 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