From 0daf7e406663eb3a99c2122773f5c3297b8c1253 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: Tue, 13 Aug 2024 17:38:31 +0800
Subject: [PATCH] 提交
---
src/views/hazardousChemicals/warehouseManage/components/productTable.vue | 186 ++++
src/views/hazardousChemicals/accessRecords/index.vue | 38
src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue | 173 +++
src/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue | 66 +
src/layout/components/Sidebar/menu.js | 20
src/views/hazardousChemicals/warehouseManage/index.vue | 38
src/views/homePage.vue | 13
src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue | 109 ++
src/views/hazardousChemicals/electronicWarehouse/components/productTable.vue | 154 +++
src/views/hazardousChemicals/traceableQuery/index.vue | 34
src/views/hazardousChemicals/warehouseManage/components/addRawDialog.vue | 272 ++++++
src/router/index.js | 23
src/views/hazardousChemicals/electronicWarehouse/components/proWarehouseRecord.vue | 112 ++
src/components/Pagination/index.vue | 4
src/views/hazardousChemicals/warehouseManage/components/printCode.vue | 189 ++++
src/views/hazardousChemicals/warehouseManage/components/addProDialog.vue | 267 ++++++
src/api/hazardousChemicals/productRecord.js | 63 +
src/api/hazardousChemicals/rawRecord.js | 55 +
src/views/hazardousChemicals/accessRecords/components/productTable.vue | 163 +++
src/views/hazardousChemicals/overdueWarning/index.vue | 18
src/views/hazardousChemicals/warehouseManage/components/rawTable.vue | 183 ++++
src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue | 170 +++
src/views/hazardousChemicals/electronicWarehouse/index.vue | 49 +
src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue | 183 ++++
24 files changed, 2,547 insertions(+), 35 deletions(-)
diff --git a/src/api/hazardousChemicals/productRecord.js b/src/api/hazardousChemicals/productRecord.js
new file mode 100644
index 0000000..da982c9
--- /dev/null
+++ b/src/api/hazardousChemicals/productRecord.js
@@ -0,0 +1,63 @@
+import request from "@/utils/request";
+
+export function getProductRecord(params) {
+ return request({
+ url: '/product-entry-record/list',
+ method: 'get',
+ params: params
+ })
+}
+
+export function addProductRecord(data) {
+ return request({
+ url: '/product-entry-record',
+ method: 'post',
+ data: data
+ })
+}
+
+export function editProductRecord(params) {
+ return request({
+ url: `/product-entry-record`,
+ method: 'put',
+ data: params
+ })
+}
+
+export function delProductRecord(data) {
+ return request({
+ url: `/product-entry-record/` + data,
+ method: 'delete'
+ })
+}
+
+export function doEntryPro(data) {
+ return request({
+ url: '/product-entry-record/doEntry/' + data,
+ method: 'post'
+ })
+}
+
+export function getProWarehouseRecord(params) {
+ return request({
+ url: '/product-warehouse-record/list',
+ method: 'get',
+ params: params
+ })
+}
+
+export function getProDetail(params) {
+ return request({
+ url: '/product/list',
+ method: 'get',
+ params: params
+ })
+}
+
+export function getProFlow(params) {
+ return request({
+ url: '/product-flow/list',
+ method: 'get',
+ params: params
+ })
+}
diff --git a/src/api/hazardousChemicals/rawRecord.js b/src/api/hazardousChemicals/rawRecord.js
new file mode 100644
index 0000000..5226964
--- /dev/null
+++ b/src/api/hazardousChemicals/rawRecord.js
@@ -0,0 +1,55 @@
+import request from "@/utils/request";
+
+export function getRawRecord(params) {
+ return request({
+ url: '/entry-record/list',
+ method: 'get',
+ params: params
+ })
+}
+
+export function addRawRecord(data) {
+ return request({
+ url: '/entry-record',
+ method: 'post',
+ data: data
+ })
+}
+
+export function editRawRecord(params) {
+ return request({
+ url: `/entry-record`,
+ method: 'put',
+ data: params
+ })
+}
+
+export function delRawRecord(data) {
+ return request({
+ url: `/entry-record/` + data,
+ method: 'delete'
+ })
+}
+
+export function doEntryRaw(data) {
+ return request({
+ url: '/entry-record/doEntry/' + data,
+ method: 'post'
+ })
+}
+
+export function getRawWarehouseRecord(params) {
+ return request({
+ url: '/warehouse-record/list',
+ method: 'get',
+ params: params
+ })
+}
+
+export function getRawDetail(params) {
+ return request({
+ url: '/hazmat/list',
+ method: 'get',
+ params: params
+ })
+}
diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue
index 38de953..d4b31ad 100644
--- a/src/components/Pagination/index.vue
+++ b/src/components/Pagination/index.vue
@@ -33,7 +33,7 @@
pageSizes: {
type: Array,
default() {
- return [10, 20, 30, 50]
+ return [5,10, 20, 30, 50]
}
},
// 移动端页码按钮的数量端默认值5
@@ -102,4 +102,4 @@
.pagination-container.hidden {
display: none;
}
-</style>
\ No newline at end of file
+</style>
diff --git a/src/layout/components/Sidebar/menu.js b/src/layout/components/Sidebar/menu.js
index fc6a211..28af68b 100644
--- a/src/layout/components/Sidebar/menu.js
+++ b/src/layout/components/Sidebar/menu.js
@@ -12,11 +12,11 @@
name: 'electronicWarehouse',
meta: { title: '电子仓库',icon: 'build',affix: true }
},
- {
- path: '/detailList',
- name: 'detailList',
- meta: { title: '危化品详单',icon: 'education',affix: true }
- },
+ // {
+ // path: '/detailList',
+ // name: 'detailList',
+ // meta: { title: '危化品详单',icon: 'education',affix: true }
+ // },
{
path: '/accessRecords',
name: 'accessRecords',
@@ -81,11 +81,11 @@
name: 'electronicWarehouse',
meta: { title: '电子仓库',icon: 'build',affix: true }
},
- {
- path: '/detailList',
- name: 'detailList',
- meta: { title: '危化品详单',icon: 'education',affix: true }
- },
+ // {
+ // path: '/detailList',
+ // name: 'detailList',
+ // meta: { title: '危化品详单',icon: 'education',affix: true }
+ // },
{
path: '/accessRecords',
name: 'accessRecords',
diff --git a/src/router/index.js b/src/router/index.js
index 42cf5f2..00443bb 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -92,19 +92,32 @@
]
},
{
- path: '/detailList',
+ path: '/rawDetail',
component: Layout,
- redirect: '/detailList',
+ redirect: '/rawDetail',
children: [
{
- path: '/detailList',
- component: () => import('@/views/hazardousChemicals/detailList/index.vue'),
- name: 'detailList',
+ path: '/rawDetail',
+ component: () => import('@/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue'),
+ name: 'rawDetail',
meta: { title: '危化品详单',icon: 'form', affix: true }
}
]
},
{
+ path: '/proDetail',
+ component: Layout,
+ redirect: '/proDetail',
+ children: [
+ {
+ path: '/proDetail',
+ component: () => import('@/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue'),
+ name: 'proDetail',
+ meta: { title: '成品详单',icon: 'form', affix: true }
+ }
+ ]
+ },
+ {
path: '/accessRecords',
component: Layout,
redirect: '/accessRecords',
diff --git a/src/views/hazardousChemicals/accessRecords/components/productTable.vue b/src/views/hazardousChemicals/accessRecords/components/productTable.vue
new file mode 100644
index 0000000..a921cfa
--- /dev/null
+++ b/src/views/hazardousChemicals/accessRecords/components/productTable.vue
@@ -0,0 +1,163 @@
+<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" />
+ <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="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="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>
+ </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"
+ />
+
+ </div>
+</template>
+
+<script setup>
+import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
+import {ElMessage, ElMessageBox} from "element-plus";
+import {delWarehouse, getWarehouse} from "@/api/hazardousChemicals/warehouse";
+import {
+ delProductRecord,
+ doEntryPro,
+ getProductRecord, getProFlow,
+ getProWarehouseRecord
+} from "@/api/hazardousChemicals/productRecord";
+import {delRawRecord} from "@/api/hazardousChemicals/rawRecord";
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const dialogRef = 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(()=>{
+ getList()
+})
+
+const getList = async () => {
+ loading.value = true
+ const res = await getProFlow(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 delProductRecord(val.id)
+ if(res.code == 200){
+ ElMessage.success('数据删除成功')
+ await getList()
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+const doEntry = (val) => {
+ ElMessageBox.confirm(
+ '确定入库该成品?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await doEntryPro(val.id)
+ if(res.code == 200){
+ ElMessage.success('入库成功')
+ await getList()
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+const printCode = (val) => {
+ console.log("val",val)
+ codeRef.value.openDialog('pro',val);
+
+}
+defineExpose({
+ getList
+});
+
+
+</script>
diff --git a/src/views/hazardousChemicals/accessRecords/index.vue b/src/views/hazardousChemicals/accessRecords/index.vue
index e5894d9..807c53b 100644
--- a/src/views/hazardousChemicals/accessRecords/index.vue
+++ b/src/views/hazardousChemicals/accessRecords/index.vue
@@ -1,9 +1,45 @@
<template>
- <div>取用记录</div>
+ <div>
+ <el-tabs v-model="data.activeName" class="demo-tabs" @click="clickTab" style="margin: 10px 10px">
+ <el-tab-pane label="成品" name="finishPro" v-if="showFinishPro">
+ <pro-table ref="proRef"></pro-table>
+ </el-tab-pane>
+ <el-tab-pane label="原材料" name="rawMaterial">
+<!-- <raw-table ref="rawRef"></raw-table>-->
+ </el-tab-pane>
+ </el-tabs>
+ </div>
</template>
<script setup>
+import {onMounted, reactive, ref} from "vue";
+import proTable from './components/productTable.vue'
+// import rawTable from './components/rawTable.vue'
+const showFinishPro = ref(false)
+const proRef = ref()
+const rawRef = ref()
+const data = reactive({
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ },
+ total: 0,
+ dataList: [],
+ activeName: 'finishPro'
+})
+onMounted(()=>{
+ showFinishPro.value = true;
+ data.activeName = showFinishPro.value ? 'finishPro' : 'rawMaterial'
+})
+const clickTab = (tab,event) =>{
+ console.log('tab',data.activeName)
+ if(data.activeName == 'finishPro'){
+ proRef.value.getList()
+ }else {
+ rawRef.value.getList()
+ }
+}
</script>
<style scoped lang="scss">
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue b/src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue
new file mode 100644
index 0000000..b807bc3
--- /dev/null
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue
@@ -0,0 +1,173 @@
+<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-select
+ v-model="data.queryParams.state"
+ placeholder="请选择状态"
+ style="width: 240px"
+ >
+ <el-option
+ v-for="item in data.typeList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ />
+ </el-select>
+ </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-button
+ type="primary"
+ plain
+ @click="back"
+ >返回</el-button>
+ </div>
+ </div>
+ <!-- 表格数据 -->
+ <el-table v-loading="loading" :data="data.dataList" :border="true">
+ <el-table-column label="序号" type="index" align="center" width="80" />
+ <el-table-column label="品名" prop="productBasic.name" align="center" />
+ <el-table-column label="产品编号" prop="productBasic.productSn" align="center" />
+ <el-table-column label="CAS号" prop="productBasic.cas" align="center" />
+ <el-table-column label="厂家" prop="productBasic.manufacturer" align="center" />
+ <el-table-column label="供应商" prop="productBasic.supplier" align="center" />
+ <el-table-column label="批号" prop="batchNo" align="center" width="120" />
+ <el-table-column label="危险性质" prop="productBasic.productCharacter" align="center" />
+ <el-table-column label="最小包装" prop="productBasic.productSn" align="center" width="120">
+ <template #default="scope">
+ <span>{{scope.row.productBasic.metering}}{{scope.row.productBasic.unit}} / {{scope.row.productBasic.minPackage == 0 ? '瓶' :scope.row.productBasic.minPackage == 1?'袋':scope.row.productBasic.minPackage == 2?'桶 ':scope.row.productBasic.minPackage == 3?'盒':scope.row.productBasic.minPackage == 4?'箱':'其他'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="入库时间" prop="updateTime" align="center" />
+ <el-table-column label="当前状态" prop="state" align="center">
+ <template #default="scope">
+ <span>{{scope.row.state ===0 ? '在库' : scope.row.state ===4 ? '标签作废' : scope.row.state ===5 ? '销售' : ''}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="在库余量" prop="remaining" align="center" >
+ <template #default="scope">
+ <span v-if="scope.row.state === 0">{{scope.row.remaining}}{{scope.row.productBasic.unit}}</span>
+ <span v-else>—</span>
+ </template>
+ </el-table-column>
+ <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="viewQR(scope.row)">查看二维码</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ v-show="data.total > 0"
+ :total="data.total"
+ v-model:page="data.queryParams.pageNum"
+ v-model:limit="data.queryParams.pageSize"
+ @pagination="getList"
+ />
+ <viewQRcode ref="dialogRef" @getList="getList"></viewQRcode>
+ </div>
+</template>
+
+<script setup>
+import {onMounted, reactive, ref} from "vue";
+import {useRoute, useRouter} from "vue-router";
+import {getProDetail, getProductRecord} from "@/api/hazardousChemicals/productRecord";
+import viewQRcode from './viewQR.vue'
+import {ElMessage} from "element-plus";
+import Cookies from "js-cookie";
+const route = useRoute()
+const router = useRouter();
+const dialogRef = ref();
+const data = reactive({
+ queryParams: {
+ basicId: null,
+ warehouseId: null,
+ state: null,
+ pageNum: 1,
+ pageSize: 10,
+ },
+ total: 0,
+ dataList: [],
+ isAdmin: false,
+ typeList: [
+ {
+ id: 0,
+ name: '在库'
+ },
+ {
+ id: 5,
+ name: '已销售'
+ },
+ {
+ id: 4,
+ name: '标签作废'
+ },
+
+ ]
+});
+const loading = ref(false);
+const backValue = ref({})
+onMounted(async ()=>{
+ if(route.query.val){
+ const val = JSON.parse(route.query.val)
+ backValue.value.pageNum =val.pageNum;
+ backValue.value.pageSize =val.pageSize;
+ data.queryParams.warehouseId =val.warehouseId
+ data.queryParams.basicId =val.basicId
+ }
+ await getList()
+})
+const getList = async () => {
+ loading.value = true
+ const res = await getProDetail(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 reset = () => {
+ data.queryParams = {
+ basicId: data.queryParams.basicId,
+ warehouseId: data.queryParams.warehouseId,
+ state: null,
+ pageNum: 1,
+ pageSize: 10,
+ }
+ getList()
+}
+
+const back = () =>{
+ const obj = {
+ pageNum: backValue.value.pageNum,
+ pageSize: backValue.value.pageSize,
+ }
+ const v = JSON.stringify(obj)
+ Cookies.set('type','pro')
+ router.push({ path: "/electronicWarehouse", query: { val: v } });
+}
+const viewQR = (val) => {
+ dialogRef.value.openDialog('pro',val)
+}
+
+</script>
+
+<style scoped lang="scss">
+
+</style>
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/proWarehouseRecord.vue b/src/views/hazardousChemicals/electronicWarehouse/components/proWarehouseRecord.vue
new file mode 100644
index 0000000..db14e34
--- /dev/null
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/proWarehouseRecord.vue
@@ -0,0 +1,112 @@
+<template>
+ <div class="notice">
+ <el-dialog
+ v-model="dialogVisible"
+ :title="title"
+ width="50%"
+ :before-close="handleClose"
+ :close-on-press-escape="false"
+ :close-on-click-modal="false"
+ >
+ <el-table v-loading="loading" :data="state.dataList" :border="true">
+ <el-table-column label="序号" type="index" align="center" width="80" />
+ <el-table-column label="时间" prop="createTime" align="center" width="120" />
+ <el-table-column label="类型" prop="state" align="center">
+ <template #default="scope">
+ <span>{{scope.row.state ===0 ? '批量导入' : scope.row.state ===3 ? '标签作废' : scope.row.state ===5 ? '销售' : ''}}</span>
+
+ </template>
+ </el-table-column>
+ <el-table-column label="数量" prop="num" align="center" />
+ <el-table-column label="操作人" prop="createName" align="center" />
+ <el-table-column label="变动后剩余" prop="remaining" align="center" />
+ </el-table>
+ <pagination
+ v-show="state.total > 0"
+ :total="state.total"
+ v-model:page="state.queryParams.pageNum"
+ v-model:limit="state.queryParams.pageSize"
+ @pagination="getRecord"
+ />
+
+ </el-dialog>
+ </div>
+</template>
+<script setup>
+import {reactive, ref, toRefs} from 'vue'
+import {ElMessage} from "element-plus";
+import {addWarehouse, checkName, editWarehouse} from "@/api/hazardousChemicals/warehouse";
+import {verifyPhone} from "@/utils/validate";
+import {checkBasicName} from "@/api/hazardousChemicals/basicInfo";
+import {getProductRecord, getProWarehouseRecord} from "@/api/hazardousChemicals/productRecord";
+
+const dialogVisible = ref(false);
+const title = ref("");
+const busRef = ref();
+const length = ref()
+const emit = defineEmits(["getList"]);
+const loading = ref(false)
+const state = reactive({
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ warehouseId: '',
+ basicId: ''
+ },
+ total: 0,
+ dataList: []
+
+})
+
+
+const openDialog = async (value) => {
+ title.value = value.productBasic.name + ' ' + '(编号:' + value.productBasic.productSn + ')' + ' '+ '的取用记录'
+ state.form = value;
+ await getRecord()
+ dialogVisible.value = true;
+}
+
+const getRecord = async () => {
+ loading.value = true
+ state.queryParams.basicId = state.form.basicId;
+ state.queryParams.warehouseId = state.form.warehouseId;
+ const res = await getProWarehouseRecord(state.queryParams)
+ if(res.code == 200){
+ state.dataList = res.data.list
+ state.total = res.data.total
+ }else{
+ ElMessage.warning(res.message)
+ }
+ loading.value = false
+}
+
+const handleClose = () => {
+ reset();
+ dialogVisible.value = false;
+ emit("getList")
+}
+const reset = () => {
+ state.form = {
+ id: '',
+ name: '',
+ remark: '',
+ }
+}
+defineExpose({
+ openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+ :deep(.el-form .el-form-item__label) {
+ font-size: 15px;
+ }
+ .file {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+}
+</style>
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/productTable.vue b/src/views/hazardousChemicals/electronicWarehouse/components/productTable.vue
new file mode 100644
index 0000000..5133541
--- /dev/null
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/productTable.vue
@@ -0,0 +1,154 @@
+<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="productBasic.name" align="center" />
+ <el-table-column label="产品编号" prop="productBasic.productSn" align="center" />
+ <el-table-column label="CAS号" prop="productBasic.cas" align="center" />
+ <el-table-column label="厂家" prop="productBasic.manufacturer" align="center" />
+ <el-table-column label="供应商" prop="productBasic.supplier" align="center" />
+ <el-table-column label="危险性质" prop="productBasic.productCharacter" align="center" />
+ <el-table-column label="最小包装" prop="productBasic.productSn" align="center" width="120">
+ <template #default="scope">
+ <span>{{scope.row.productBasic.metering}}{{scope.row.productBasic.unit}} / {{scope.row.productBasic.minPackage == 0 ? '瓶' :scope.row.productBasic.minPackage == 1?'袋':scope.row.productBasic.minPackage == 2?'桶 ':scope.row.productBasic.minPackage == 3?'盒':scope.row.productBasic.minPackage == 4?'箱':'其他'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="批号" prop="batchNo" 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">
+ <span>{{scope.row.state === 0 ? '未入库' : '已入库'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180" >
+ <template #default="scope">
+ <el-button link type="primary" @click="getProRecord(scope.row)" >动库记录</el-button>
+ <el-button link type="primary" @click="toDetail(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"
+ />
+ <pro-warehouse-dialog ref="dialogRef" @getList="getList"></pro-warehouse-dialog>
+ </div>
+</template>
+
+<script setup>
+import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
+import {ElMessage, ElMessageBox} from "element-plus";
+import proWarehouseDialog from './proWarehouseRecord.vue'
+
+import {
+ delProductRecord,
+ doEntryPro,
+ getProductRecord,
+ getProWarehouseRecord
+} from "@/api/hazardousChemicals/productRecord";
+import {delRawRecord} from "@/api/hazardousChemicals/rawRecord";
+import {useRoute, useRouter} from "vue-router";
+const router = useRouter()
+const route = useRoute()
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const dialogRef = 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 getProductRecord(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 getProRecord = (val) => {
+ dialogRef.value.openDialog(val)
+}
+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: "/proDetail", query: { val: v } });
+}
+
+defineExpose({
+ getList
+});
+
+</script>
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue b/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue
new file mode 100644
index 0000000..e9212a0
--- /dev/null
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue
@@ -0,0 +1,183 @@
+<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-select
+ v-model="data.queryParams.state"
+ placeholder="请选择状态"
+ style="width: 240px"
+ >
+ <el-option
+ v-for="item in data.typeList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ />
+ </el-select>
+ </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-button
+ type="primary"
+ plain
+ @click="back"
+ >返回</el-button>
+ </div>
+ </div>
+ <!-- 表格数据 -->
+ <el-table v-loading="loading" :data="data.dataList" :border="true">
+ <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" />
+ <el-table-column label="CAS号" prop="hazmatBasic.cas" align="center" />
+ <el-table-column label="厂家" prop="hazmatBasic.manufacturer" align="center" />
+ <el-table-column label="供应商" prop="hazmatBasic.supplier" align="center" />
+ <el-table-column label="批号" prop="batchNo" align="center" width="120" />
+ <el-table-column label="危险性质" prop="hazmatBasic.hazmatCharacter" align="center" />
+ <el-table-column label="最小包装" prop="hazmatBasic.productSn" align="center" width="120">
+ <template #default="scope">
+ <span>{{scope.row.hazmatBasic.metering}}{{scope.row.hazmatBasic.unit}} / {{scope.row.hazmatBasic.minPackage == 0 ? '瓶' :scope.row.hazmatBasic.minPackage == 1?'袋':scope.row.hazmatBasic.minPackage == 2?'桶 ':scope.row.hazmatBasic.minPackage == 3?'盒':scope.row.hazmatBasic.minPackage == 4?'箱':'其他'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="入库时间" prop="updateTime" align="center" />
+ <el-table-column label="当前状态" prop="state" align="center">
+ <template #default="scope">
+ <span>{{scope.row.state ===0 ? '在库' : scope.row.state === 1 ? '领用归还在库' :scope.row.state === 2? '领用中': scope.row.state === 3 ? '已用完' : scope.row.state === 4 ? '标签作废' : ''}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="在库余量" prop="remaining" align="center" >
+ <template #default="scope">
+ <span v-if="scope.row.state === 0">{{scope.row.remaining}}{{scope.row.hazmatBasic.unit}}</span>
+ <span v-else>—</span>
+ </template>
+ </el-table-column>
+ <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="viewQR(scope.row)">查看二维码</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ v-show="data.total > 0"
+ :total="data.total"
+ v-model:page="data.queryParams.pageNum"
+ v-model:limit="data.queryParams.pageSize"
+ @pagination="getList"
+ />
+ <viewQRcode ref="dialogRef" @getList="getList"></viewQRcode>
+ </div>
+</template>
+
+<script setup>
+import {onMounted, reactive, ref} from "vue";
+import {useRoute, useRouter} from "vue-router";
+import {getProDetail, getProductRecord} from "@/api/hazardousChemicals/productRecord";
+import viewQRcode from './viewQR.vue'
+import {ElMessage} from "element-plus";
+import {getRawDetail} from "@/api/hazardousChemicals/rawRecord";
+import Cookies from "js-cookie";
+const route = useRoute()
+const router = useRouter();
+const dialogRef = ref();
+const data = reactive({
+ queryParams: {
+ basicId: null,
+ warehouseId: null,
+ state: null,
+ pageNum: 1,
+ pageSize: 10,
+ },
+ total: 0,
+ dataList: [],
+ isAdmin: false,
+ typeList: [
+ {
+ id: 0,
+ name: '在库'
+ },
+ {
+ id: 1,
+ name: '领用归还在库'
+ },
+ {
+ id: 2,
+ name: '领用中'
+ },
+ {
+ id: 3,
+ name: '已用完'
+ },
+ {
+ id: 4,
+ name: '标签作废'
+ },
+
+ ]
+});
+const loading = ref(false);
+const backValue = ref({})
+onMounted(async ()=>{
+ if(route.query.val){
+ const val = JSON.parse(route.query.val)
+ backValue.value.pageNum =val.pageNum;
+ backValue.value.pageSize =val.pageSize;
+ data.queryParams.warehouseId =val.warehouseId
+ data.queryParams.basicId =val.basicId
+ }
+ await getList()
+})
+const getList = async () => {
+ loading.value = true
+ const res = await getRawDetail(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 reset = () => {
+ data.queryParams = {
+ basicId: data.queryParams.basicId,
+ warehouseId: data.queryParams.warehouseId,
+ state: null,
+ pageNum: 1,
+ pageSize: 10,
+ }
+ getList()
+}
+
+const back = () =>{
+ const obj = {
+ pageNum: backValue.value.pageNum,
+ pageSize: backValue.value.pageSize,
+ type: 'raw'
+ }
+ const v = JSON.stringify(obj)
+ Cookies.set('type','raw')
+ router.push({ path: "/electronicWarehouse", query: { val: v } });
+}
+const viewQR = (val) => {
+ dialogRef.value.openDialog('raw',val)
+}
+
+</script>
+
+<style scoped lang="scss">
+
+</style>
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue b/src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue
new file mode 100644
index 0000000..4e65c13
--- /dev/null
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/rawTable.vue
@@ -0,0 +1,170 @@
+<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="hazmatBasic.name" align="center" />
+ <el-table-column label="产品编号" prop="hazmatBasic.productSn" align="center" />
+ <el-table-column label="CAS号" prop="hazmatBasic.cas" align="center" />
+ <el-table-column label="厂家" prop="hazmatBasic.manufacturer" align="center" />
+ <el-table-column label="供应商" prop="hazmatBasic.supplier" align="center" />
+ <el-table-column label="危险性质" prop="hazmatBasic.hazmatCharacter" align="center" />
+ <el-table-column label="最小包装" align="center" width="120">
+ <template #default="scope">
+ <span>{{scope.row.hazmatBasic.metering}}{{scope.row.hazmatBasic.unit}} / {{scope.row.hazmatBasic.minPackage == 0 ? '瓶' :scope.row.hazmatBasic.minPackage == 1?'袋':scope.row.hazmatBasic.minPackage == 2?'桶 ':scope.row.hazmatBasic.minPackage == 3?'盒':scope.row.hazmatBasic.minPackage == 4?'箱':'其他'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="批号" prop="batchNo" 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">
+ <span>{{scope.row.state === 0 ? '未入库' : '已入库'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" >
+ <template #default="scope">
+ <el-button link type="primary" @click="getProRecord(scope.row)" >动库记录</el-button>
+ <el-button link type="primary" @click="toDetail(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"
+ />
+ <raw-warehouse-dialog ref="dialogRef" @getList="getList"></raw-warehouse-dialog>
+
+ </div>
+</template>
+
+<script setup>
+import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
+import {ElMessage, ElMessageBox} from "element-plus";
+const router = useRouter()
+const route = useRoute()
+import rawWarehouseDialog from './rawWarehouseRecord.vue'
+import {delRawRecord, doEntryRaw, getRawRecord, getRawWarehouseRecord} from "@/api/hazardousChemicals/rawRecord";
+import {useRoute, useRouter} from "vue-router";
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const dialogRef = 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 getRawRecord(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 getProRecord = (val) => {
+ dialogRef.value.openDialog(val)
+}
+
+defineExpose({
+ getList
+});
+
+</script>
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue b/src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue
new file mode 100644
index 0000000..cbe3ff6
--- /dev/null
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue
@@ -0,0 +1,109 @@
+<template>
+ <div class="notice">
+ <el-dialog
+ v-model="dialogVisible"
+ :title="title"
+ width="50%"
+ :before-close="handleClose"
+ :close-on-press-escape="false"
+ :close-on-click-modal="false"
+ >
+ <el-table v-loading="loading" :data="state.dataList" :border="true">
+ <el-table-column label="序号" type="index" align="center" width="80" />
+ <el-table-column label="时间" prop="createTime" align="center" width="120" />
+ <el-table-column label="类型" prop="state" 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" />
+ <el-table-column label="操作人" prop="createName" align="center" />
+ <el-table-column label="变动后剩余" prop="remaining" align="center" />
+ </el-table>
+ <pagination
+ v-show="state.total > 0"
+ :total="state.total"
+ v-model:page="state.queryParams.pageNum"
+ v-model:limit="state.queryParams.pageSize"
+ @pagination="getRecord"
+ />
+
+ </el-dialog>
+ </div>
+</template>
+<script setup>
+import {reactive, ref, toRefs} from 'vue'
+import {ElMessage} from "element-plus";
+import {getRawWarehouseRecord} from "@/api/hazardousChemicals/rawRecord";
+
+const dialogVisible = ref(false);
+const title = ref("");
+const busRef = ref();
+const length = ref()
+const emit = defineEmits(["getList"]);
+const loading = ref(false)
+const state = reactive({
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ warehouseId: '',
+ basicId: ''
+ },
+ total: 0,
+ dataList: []
+
+})
+
+
+const openDialog = async (value) => {
+ title.value = value.hazmatBasic.name + ' ' + '(编号:' + value.hazmatBasic.productSn + ')' + ' '+ '的取用记录'
+ state.form = value;
+ await getRecord()
+ dialogVisible.value = true;
+}
+
+const getRecord = async () => {
+ loading.value = true
+ state.queryParams.basicId = state.form.basicId;
+ state.queryParams.warehouseId = state.form.warehouseId;
+ const res = await getRawWarehouseRecord(state.queryParams)
+ if(res.code == 200){
+ state.dataList = res.data.list
+ state.total = res.data.total
+ }else{
+ ElMessage.warning(res.message)
+ }
+ loading.value = false
+}
+
+const handleClose = () => {
+ reset();
+ dialogVisible.value = false;
+ emit("getList")
+}
+const reset = () => {
+ state.form = {
+ id: '',
+ name: '',
+ remark: '',
+ }
+}
+defineExpose({
+ openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+ :deep(.el-form .el-form-item__label) {
+ font-size: 15px;
+ }
+ .file {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+}
+</style>
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue b/src/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue
new file mode 100644
index 0000000..a7dd3b3
--- /dev/null
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue
@@ -0,0 +1,66 @@
+<template>
+ <div class="notice">
+ <el-dialog
+ v-model="dialogVisible"
+ width="400px"
+ :before-close="handleClose"
+ :close-on-press-escape="false"
+ :close-on-click-modal="false"
+ >
+ <el-card style="max-width: 480px">
+ <div style="display: flex;flex-direction: column;align-items: center;font-size: 20px;font-weight: 600">
+ <span>{{title}}</span>
+ <vue-qr :size="150" :margin="0" :auto-color="true" :dot-scale="1" :text="state.form.code" style="margin: 10px 0 10px 0"></vue-qr>
+ <span>{{state.form.code}}</span>
+ </div>
+ </el-card>
+ </el-dialog>
+ </div>
+</template>
+<script setup>
+import {reactive, ref, toRefs} from 'vue'
+import {ElMessage} from "element-plus";
+import VueQr from "vue-qr/src/packages/vue-qr.vue";
+
+const dialogVisible = ref(false);
+const title = ref("");
+const busRef = ref();
+const length = ref()
+const emit = defineEmits(["getList"]);
+
+const state = reactive({
+})
+
+
+const openDialog = async (type,value) => {
+ if(type == 'pro'){
+ title.value = value.productBasic.name + ' ' + '—' + ' '+ value.productBasic.productSn
+ }else {
+ title.value = value.hazmatBasic.name + ' ' + '—' + ' '+ value.hazmatBasic.productSn
+ }
+
+ state.form = value;
+ dialogVisible.value = true;
+}
+const handleClose = () => {
+ dialogVisible.value = false;
+ emit("getList")
+}
+defineExpose({
+ openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+ :deep(.el-form .el-form-item__label) {
+ font-size: 15px;
+ }
+ .file {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+}
+</style>
diff --git a/src/views/hazardousChemicals/electronicWarehouse/index.vue b/src/views/hazardousChemicals/electronicWarehouse/index.vue
index ffa1c08..e3c43d6 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/index.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/index.vue
@@ -1,9 +1,56 @@
<template>
- <div>电子仓库</div>
+ <div>
+ <el-tabs v-model="data.activeName" class="demo-tabs" @click="clickTab" style="margin: 10px 10px">
+ <el-tab-pane label="成品" name="finishPro" v-if="showFinishPro">
+ <pro-table ref="proRef"></pro-table>
+ </el-tab-pane>
+ <el-tab-pane label="原材料" name="rawMaterial">
+ <raw-table ref="rawRef"></raw-table>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
</template>
<script setup>
+import {onMounted, reactive, ref} from "vue";
+import proTable from './components/productTable.vue'
+import rawTable from './components/rawTable.vue'
+import Cookies from "js-cookie";
+const showFinishPro = ref(false)
+const proRef = ref()
+const rawRef = ref()
+const data = reactive({
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ },
+ total: 0,
+ dataList: [],
+ activeName: 'finishPro'
+})
+onMounted(()=>{
+ showFinishPro.value = true;
+ if(Cookies.get('type')){
+ data.activeName = showFinishPro.value && Cookies.get('type') ==='pro' ? 'finishPro' : 'rawMaterial'
+ }else{
+ data.activeName = showFinishPro.value ? 'finishPro' : 'rawMaterial'
+ }
+})
+const clickTab = (tab,event) =>{
+ console.log('tab',data.activeName)
+ if(data.activeName == 'finishPro'){
+ if(proRef.value){
+ proRef.value.getList()
+ }
+
+ }else {
+ if(rawRef.value){
+ rawRef.value.getList()
+ }
+
+ }
+}
</script>
<style scoped lang="scss">
diff --git a/src/views/hazardousChemicals/overdueWarning/index.vue b/src/views/hazardousChemicals/overdueWarning/index.vue
index 20c9979..de7dd3e 100644
--- a/src/views/hazardousChemicals/overdueWarning/index.vue
+++ b/src/views/hazardousChemicals/overdueWarning/index.vue
@@ -97,15 +97,15 @@
})
const getList = async () => {
- // loading.value = true
- // const res = await getWarning(data.queryParams)
- // if(res.code == 200){
- // data.dataList = res.data.list
- // data.total = res.data.total
- // }else{
- // ElMessage.warning(res.message)
- // }
- // loading.value = false
+ loading.value = true
+ const res = await getWarning(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) => {
diff --git a/src/views/hazardousChemicals/traceableQuery/index.vue b/src/views/hazardousChemicals/traceableQuery/index.vue
index b8d08e4..cd019e4 100644
--- a/src/views/hazardousChemicals/traceableQuery/index.vue
+++ b/src/views/hazardousChemicals/traceableQuery/index.vue
@@ -1,9 +1,41 @@
<template>
- <div>溯源查询</div>
+ <div>
+ <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-form-item>
+ <el-form-item >
+ <el-button
+ type="primary"
+ @click="getList"
+ >查询</el-button>
+ </el-form-item>
+ </el-form>
+ <div v-if="data.form.code !=''">
+
+ </div>
+ <el-empty description="暂无数据" style="margin-top: 10%" v-else></el-empty>
+ </div>
+ </div>
</template>
<script setup>
+import {reactive} from "vue";
+const data = reactive({
+ queryParams: {
+ name: '',
+ productSn: ''
+ },
+ form: {
+ code: ''
+ },
+ dataList: []
+});
+const getList = () => {
+
+}
</script>
<style scoped lang="scss">
diff --git a/src/views/hazardousChemicals/warehouseManage/components/addProDialog.vue b/src/views/hazardousChemicals/warehouseManage/components/addProDialog.vue
new file mode 100644
index 0000000..db362a7
--- /dev/null
+++ b/src/views/hazardousChemicals/warehouseManage/components/addProDialog.vue
@@ -0,0 +1,267 @@
+<template>
+ <div class="notice">
+ <el-dialog
+ v-model="dialogVisible"
+ :title="title+'成品入库'"
+ width="600px"
+ :before-close="handleClose"
+ :close-on-press-escape="false"
+ :close-on-click-modal="false"
+ >
+ <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" >
+ <el-form-item label="入库成品:" prop="basicName" >
+ <el-select
+ clearable
+ v-model="state.form.basicName"
+ filterable
+ remote
+ reserve-keyword
+ placeholder="请输入入库成品"
+ remote-show-suffix
+ :remote-method="getProBasic"
+ style="width: 100%"
+ @change="selectValue"
+ >
+ <el-option
+ v-for="item in state.proList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.name"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="仓库:" prop="warehouseName" >
+ <el-select
+ clearable
+ v-model="state.form.warehouseName"
+ filterable
+ remote
+ reserve-keyword
+ placeholder="请输入所入仓库"
+ remote-show-suffix
+ :remote-method="getWareHouseList"
+ style="width: 100%"
+ @change="selectWareValue"
+ >
+ <el-option
+ v-for="item in state.wareHouseList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.name"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="最小包装数量:" prop="num" >
+ <el-input v-model.trim="state.form.num" oninput="value=value.replace(/^\.+|[^\d]/g,'')" placeholder="请输入最小包装数量" @input="changeNum"></el-input>
+ </el-form-item>
+ <el-form-item label="批号:" prop="batchNo" >
+ <el-input v-model.trim="state.form.batchNo" placeholder="请输入批号"></el-input>
+ </el-form-item>
+ <el-form-item v-if="state.form.basicName && state.form.num" style="margin-left: -75px;margin-top: 30px">
+ <span style="font-size: 15px;font-weight: 600">{{state.message}}</span>
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="handleClose" size="default">取 消</el-button>
+ <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+<script setup>
+import {reactive, ref, toRefs} from 'vue'
+import {ElMessage} from "element-plus";
+import {getWarehouse} from "@/api/hazardousChemicals/warehouse";
+import {addProductRecord, editProductRecord, getProductRecord} from "@/api/hazardousChemicals/productRecord";
+import {getFinishBasicList} from "@/api/hazardousChemicals/finishedBasicInfo";
+import moment from "moment";
+
+const dialogVisible = ref(false);
+const title = ref("");
+const busRef = ref();
+const length = ref()
+const emit = defineEmits(["getList"]);
+
+
+const state = reactive({
+ form: {
+ id: '',
+ basicId: null,
+ basicName:'',
+ warehouseName: '',
+ warehouseId: null,
+ num: null,
+ batchNo: ''
+
+ },
+ formRules:{
+ num: [{ required: true, trigger: "blur", message: '请输入最小包装数量' }],
+ warehouseName: [{ required: true, trigger: "blur", message: '请选择入库仓库' }],
+ basicName: [{ required: true, trigger: "blur", message: '请选择入库成品' }],
+ // batchNo: [{ required: true, trigger: "blur", message: '请输入批号' }]
+ },
+ proList: [],
+ wareHouseList: [],
+ message: ''
+})
+
+
+const openDialog = async (type, value) => {
+ await getProBasic("")
+ await getWareHouseList("")
+
+ title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑':'' ;
+ if(type === 'edit' ) {
+ state.form = value;
+ state.form.basicName = value.productBasic.name
+ state.form.warehouseName = value.warehouse.name;
+ choosePro.value = value.productBasic
+ changeNum()
+ }
+ dialogVisible.value = true;
+}
+const getProBasic = async (val) => {
+ let param = {}
+ if(val != ""){
+ param = {
+ name: val
+ }
+ }else {
+ param = {
+ pageNum: 1,
+ pageSize: 10
+ }
+ }
+ const res = await getFinishBasicList(param)
+ if(res.code == 200){
+ state.proList = res.data.list
+ }else{
+ ElMessage.warning(res.message)
+ }
+}
+const getWareHouseList = async (val) => {
+ let param = {}
+ if(val != ""){
+ param = {
+ name: val
+ }
+ }else {
+ param = {
+ pageNum: 1,
+ pageSize: 10
+ }
+ }
+ const res = await getWarehouse(param)
+ if(res.code == 200){
+ state.wareHouseList = res.data.list
+ }else{
+ ElMessage.warning(res.message)
+ }
+}
+
+const onSubmit = async () => {
+ const valid = await busRef.value.validate();
+ if(valid){
+ if(title.value === '新增'){
+ if(state.form.batchNo == ''){
+ state.form.batchNo = moment(new Date()).format("YYYY-MM-DD")
+ }
+ const {id, ...data} = JSON.parse(JSON.stringify(state.form))
+ const res = await addProductRecord(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '新增成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ busRef.value.clearValidate();
+ reset();
+ dialogVisible.value = false;
+ }else if(title.value === '编辑'){
+ if(state.form.batchNo == ''){
+ state.form.batchNo = moment(new Date()).format("YYYY-MM-DD")
+ }
+ const {...data} = JSON.parse(JSON.stringify(state.form))
+ const res = await editProductRecord(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '编辑成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ busRef.value.clearValidate();
+ reset();
+ dialogVisible.value = false;
+ }
+ }
+}
+const choosePro =ref()
+const selectValue = (val) => {
+ state.proList.forEach(item => {
+ if(item.name === val){
+ state.form.basicId = item.id
+ console.log('item',item)
+ choosePro.value = item;
+ }
+ })
+}
+const changeNum = () => {
+ const minPackageType = choosePro.value.minPackage == 0 ? '瓶' :choosePro.value.minPackage == 1?'袋':choosePro.value.minPackage == 2?'桶 ':choosePro.value.minPackage == 3?'盒':choosePro.value.minPackage == 4?'箱':'其他'
+ state.message = `您将入库 { ${choosePro.value.name} },编号:{ ${choosePro.value.productSn} },最小包装${choosePro.value.metering}${choosePro.value.unit},类别:${minPackageType}。 \n 共计:${state.form.num}${minPackageType}`
+}
+const selectWareValue = (val) => {
+ state.wareHouseList.forEach(item => {
+ if(item.name === val){
+ state.form.warehouseId = item.id
+ }
+ })
+}
+
+const handleClose = () => {
+ busRef.value.clearValidate();
+ reset();
+ dialogVisible.value = false;
+ emit("getList")
+}
+const reset = () => {
+ state.form = {
+ id: '',
+ basicId: null,
+ basicName:'',
+ warehouseName: '',
+ warehouseId: null,
+ num: null,
+ batchNo: ''
+ }
+ state.proList = [];
+ state.wareHouseList = [];
+ state.message = '';
+}
+defineExpose({
+ openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+ white-space: pre-line;
+ :deep(.el-form .el-form-item__label) {
+ font-size: 15px;
+ }
+ .file {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+
+}
+</style>
diff --git a/src/views/hazardousChemicals/warehouseManage/components/addRawDialog.vue b/src/views/hazardousChemicals/warehouseManage/components/addRawDialog.vue
new file mode 100644
index 0000000..2bc3776
--- /dev/null
+++ b/src/views/hazardousChemicals/warehouseManage/components/addRawDialog.vue
@@ -0,0 +1,272 @@
+<template>
+ <div class="notice">
+ <el-dialog
+ v-model="dialogVisible"
+ :title="title+'危化品入库'"
+ width="600px"
+ :before-close="handleClose"
+ :close-on-press-escape="false"
+ :close-on-click-modal="false"
+ >
+ <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" >
+ <el-form-item label="入库危化品:" prop="basicName" >
+ <el-select
+ clearable
+ v-model="state.form.basicName"
+ filterable
+ remote
+ reserve-keyword
+ placeholder="请输入入库危化品"
+ remote-show-suffix
+ :remote-method="getRawBasicList"
+ style="width: 100%"
+ @change="selectValue"
+ >
+ <el-option
+ v-for="item in state.rawList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.name"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="仓库:" prop="warehouseName" >
+ <el-select
+ clearable
+ v-model="state.form.warehouseName"
+ filterable
+ remote
+ reserve-keyword
+ placeholder="请输入所入仓库"
+ remote-show-suffix
+ :remote-method="getWareHouseList"
+ style="width: 100%"
+ @change="selectWareValue"
+ >
+ <el-option
+ v-for="item in state.wareHouseList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.name"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="最小包装数量:" prop="num" >
+ <el-input v-model.trim="state.form.num" oninput="value=value.replace(/^\.+|[^\d]/g,'')" placeholder="请输入最小包装数量" @input="changeNum"></el-input>
+ </el-form-item>
+ <el-form-item label="批号:" prop="batchNo" >
+ <el-input v-model.trim="state.form.batchNo" placeholder="请输入批号"></el-input>
+ </el-form-item>
+<!-- <el-form-item label="条码前缀:" prop="codePrex" >-->
+<!-- <el-input v-model.trim="state.form.codePrex" placeholder="请输入条码前缀"></el-input>-->
+<!-- </el-form-item>-->
+ <el-form-item v-if="state.form.basicName && state.form.num" style="margin-left: -75px;margin-top: 30px">
+ <span style="font-size: 15px;font-weight: 600">{{state.message}}</span>
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="handleClose" size="default">取 消</el-button>
+ <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+<script setup>
+import {reactive, ref, toRefs} from 'vue'
+import {ElMessage} from "element-plus";
+import {addWarehouse, checkName, editWarehouse, getWarehouse} from "@/api/hazardousChemicals/warehouse";
+import {verifyPhone} from "@/utils/validate";
+import {checkBasicName, getBasicList} from "@/api/hazardousChemicals/basicInfo";
+import {addProductRecord, editProductRecord, getProductRecord} from "@/api/hazardousChemicals/productRecord";
+import {getFinishBasicList} from "@/api/hazardousChemicals/finishedBasicInfo";
+import moment from "moment";
+import {addRawRecord, editRawRecord, getRawRecord} from "@/api/hazardousChemicals/rawRecord";
+
+const dialogVisible = ref(false);
+const title = ref("");
+const busRef = ref();
+const length = ref()
+const emit = defineEmits(["getList"]);
+
+
+const state = reactive({
+ form: {
+ id: '',
+ basicId: null,
+ basicName:'',
+ warehouseName: '',
+ warehouseId: null,
+ num: null,
+ batchNo: ''
+
+ },
+ formRules:{
+ num: [{ required: true, trigger: "blur", message: '请输入最小包装数量' }],
+ warehouseName: [{ required: true, trigger: "blur", message: '请选择入库仓库' }],
+ basicName: [{ required: true, trigger: "blur", message: '请选择入库成品' }],
+ // batchNo: [{ required: true, trigger: "blur", message: '请输入批号' }]
+ },
+ rawList: [],
+ wareHouseList: [],
+ message: ''
+})
+
+
+const openDialog = async (type, value) => {
+ await getRawBasicList("")
+ await getWareHouseList("")
+ title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑':'' ;
+ if(type === 'edit' ) {
+ state.form = value;
+ state.form.basicName = value.hazmatBasic.name
+ state.form.warehouseName = value.warehouse.name;
+ choosePro.value = value.hazmatBasic
+ changeNum()
+ }
+ dialogVisible.value = true;
+}
+const getRawBasicList = async (val) => {
+ let param = {}
+ if(val != ""){
+ param = {
+ name: val
+ }
+ }else {
+ param = {
+ pageNum: 1,
+ pageSize: 10
+ }
+ }
+ const res = await getBasicList(param)
+ if(res.code == 200){
+ state.rawList = res.data.list
+ }else{
+ ElMessage.warning(res.message)
+ }
+}
+const getWareHouseList = async (val) => {
+ let param = {}
+ if(val != ""){
+ param = {
+ name: val
+ }
+ }else {
+ param = {
+ pageNum: 1,
+ pageSize: 10
+ }
+ }
+ const res = await getWarehouse(param)
+ if(res.code == 200){
+ state.wareHouseList = res.data.list
+ }else{
+ ElMessage.warning(res.message)
+ }
+}
+
+const onSubmit = async () => {
+ const valid = await busRef.value.validate();
+ if(valid){
+ if(title.value === '新增'){
+ if(state.form.batchNo == ''){
+ state.form.batchNo = moment(new Date()).format("YYYY-MM-DD")
+ }
+ const {id, ...data} = JSON.parse(JSON.stringify(state.form))
+ const res = await addRawRecord(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '新增成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ busRef.value.clearValidate();
+ reset();
+ dialogVisible.value = false;
+ }else if(title.value === '编辑'){
+ if(state.form.batchNo == ''){
+ state.form.batchNo = moment(new Date()).format("YYYY-MM-DD")
+ }
+ const {...data} = JSON.parse(JSON.stringify(state.form))
+ const res = await editRawRecord(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '编辑成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ busRef.value.clearValidate();
+ reset();
+ dialogVisible.value = false;
+ }
+ }
+}
+const choosePro =ref()
+const selectValue = (val) => {
+ state.rawList.forEach(item => {
+ if(item.name === val){
+ state.form.basicId = item.id
+ console.log('item',item)
+ choosePro.value = item;
+ }
+ })
+}
+const changeNum = () => {
+ const minPackageType = choosePro.value.minPackage == 0 ? '瓶' :choosePro.value.minPackage == 1?'袋':choosePro.value.minPackage == 2?'桶 ':choosePro.value.minPackage == 3?'盒':choosePro.value.minPackage == 4?'箱':'其他'
+ state.message = `您将入库 { ${choosePro.value.name} },编号:{ ${choosePro.value.productSn} },最小包装${choosePro.value.metering}${choosePro.value.unit},类别:${minPackageType}。 \n 共计:${state.form.num}${minPackageType}`
+}
+const selectWareValue = (val) => {
+ state.wareHouseList.forEach(item => {
+ if(item.name === val){
+ state.form.warehouseId = item.id
+ }
+ })
+}
+
+const handleClose = () => {
+ busRef.value.clearValidate();
+ reset();
+ dialogVisible.value = false;
+ emit("getList")
+}
+const reset = () => {
+ state.form = {
+ id: '',
+ basicId: null,
+ basicName:'',
+ warehouseName: '',
+ warehouseId: null,
+ num: null,
+ batchNo: ''
+ }
+ state.rawList = [];
+ state.wareHouseList = [];
+ state.message = '';
+}
+defineExpose({
+ openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+ white-space: pre-line;
+ :deep(.el-form .el-form-item__label) {
+ font-size: 15px;
+ }
+ .file {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+
+}
+</style>
diff --git a/src/views/hazardousChemicals/warehouseManage/components/printCode.vue b/src/views/hazardousChemicals/warehouseManage/components/printCode.vue
new file mode 100644
index 0000000..6c776a9
--- /dev/null
+++ b/src/views/hazardousChemicals/warehouseManage/components/printCode.vue
@@ -0,0 +1,189 @@
+<template>
+ <div class="notice">
+ <el-dialog
+ v-model="dialogVisible"
+ :title="title == 'pro' ? '成品二维码打印' : '危化品二维码打印'"
+ width="600px"
+ :before-close="handleClose"
+ :close-on-press-escape="false"
+ :close-on-click-modal="false"
+ >
+ <el-table v-loading="state.loading" :data="state.dataList" :border="true" :show-header="false" height="550" @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="55" align="center" />
+ <el-table-column align="center" >
+ <template #default="scope">
+ <div :id="scope.row.code">
+ <div style="display: flex;flex-direction: column;align-items: center;justify-content: center">
+ <div style="font-size:14px;margin-top:10px;">{{scope.row.name}}—{{scope.row.productSn}}</div>
+ <vue-qr :size="80" :margin="0" :auto-color="true" :dot-scale="1" :text="scope.row.code" style="margin-top:10px;"></vue-qr>
+ <div style="font-size:10px;margin-top:10px;">{{scope.row.code}}</div>
+ </div>
+ </div>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ v-show="state.total > 0"
+ :total="state.total"
+ v-model:page="state.queryParams.pageNum"
+ v-model:limit="state.queryParams.pageSize"
+ @pagination="getList"
+ />
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="handleClose" size="default">取 消</el-button>
+ <el-button type="primary" @click="printEvent" size="default" v-preReClick>打印</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+<script setup>
+import {reactive, ref, toRefs} from 'vue'
+import VueQr from 'vue-qr/src/packages/vue-qr.vue'
+import {ElMessage} from "element-plus";
+import {addWarehouse, checkName, editWarehouse} from "@/api/hazardousChemicals/warehouse";
+import {verifyPhone} from "@/utils/validate";
+import {checkBasicName} from "@/api/hazardousChemicals/basicInfo";
+
+const dialogVisible = ref(false);
+const title = ref("");
+const busRef = ref();
+const length = ref()
+const emit = defineEmits(["getList"]);
+
+const state = reactive({
+ loading: false,
+ dataList: [],
+ total: 0,
+ queryParams:{
+ pageNum: 1,
+ pageSize: 5
+ },
+ chooseList: []
+
+})
+
+const originalList = ref([])
+const openDialog = async (type,value) => {
+ 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 {
+
+ 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;
+}
+const getRowKey = (row) => {
+ return row.id
+}
+
+const onSubmit = async () => {
+
+}
+const handleSelectionChange = (val) => {
+ // state.form.studentIds = val.map(item => item.id)
+ state.chooseList = val
+ console.log("选中的行", val)
+}
+
+const handleClose = () => {
+ reset();
+ dialogVisible.value = false;
+ emit("getList")
+}
+const reset = () => {
+ state.dataList = [];
+ state.queryParams = {
+ pageNum: 1,
+ pageSize: 5
+ }
+ 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 printEvent=() => {
+ let data = []
+ if(state.chooseList && state.chooseList.length>0){
+ data = state.chooseList
+ }else {
+ data = state.dataList
+ }
+ let qrCodes=''
+ for(let index in data){
+ console.log(index,'index')
+ qrCodes+=`<div class="my-list-col"><div class="centered-content">${document.getElementById(data[index].code).innerHTML}</div></div>`
+ }
+ const printContent=document.createElement('div')
+ printContent.innerHTML=qrCodes
+ //创建一个新的隐藏的iframe元素
+ const printFrame =document.createElement('iframe')
+ printFrame.style.display='none'
+ document.body.appendChild(printFrame)
+
+ const printDocument=printFrame.contentWindow.document
+ printDocument.open()
+ printDocument.write(`
+ <html>
+ <head>
+ <title>Print</title>
+ <style>
+ @media print {
+ .page-break { page-break-after:always;} /* 定义分页符格式*/
+ .centered-content { text-align:center;} /* 居中对齐内容*/
+ @page { size:50mm 40mm;margin:0mm; }
+ }
+ </style>
+ </head>
+ <body style='margin:0;padding:0;'>${printContent.innerHTML}</body>
+ </html>
+ `)
+ printDocument.close()
+ //在打印窗口中调用打印功能
+ printFrame.contentWindow.print()
+ //移除隐藏的iframe元素
+ document.body.removeChild(printFrame)
+ // handleClose()
+}
+
+
+defineExpose({
+ openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+ :deep(.el-form .el-form-item__label) {
+ font-size: 15px;
+ }
+ .file {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+}
+</style>
diff --git a/src/views/hazardousChemicals/warehouseManage/components/productTable.vue b/src/views/hazardousChemicals/warehouseManage/components/productTable.vue
new file mode 100644
index 0000000..7668e43
--- /dev/null
+++ b/src/views/hazardousChemicals/warehouseManage/components/productTable.vue
@@ -0,0 +1,186 @@
+<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>
+ <el-button
+ type="primary"
+ plain
+ icon="Plus"
+ @click="openDialog('add',{})"
+ >新增</el-button>
+ </el-form-item>
+ <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="productBasic.name" align="center" />
+ <el-table-column label="产品编号" prop="productBasic.productSn" align="center" />
+ <el-table-column label="CAS号" prop="productBasic.cas" align="center" />
+ <el-table-column label="厂家" prop="productBasic.manufacturer" align="center" />
+ <el-table-column label="供应商" prop="productBasic.supplier" align="center" />
+ <el-table-column label="危险性质" prop="productBasic.productCharacter" align="center" />
+ <el-table-column label="最小包装" prop="productBasic.productSn" align="center" width="120">
+ <template #default="scope">
+ <span>{{scope.row.productBasic.metering}}{{scope.row.productBasic.unit}} / {{scope.row.productBasic.minPackage == 0 ? '瓶' :scope.row.productBasic.minPackage == 1?'袋':scope.row.productBasic.minPackage == 2?'桶 ':scope.row.productBasic.minPackage == 3?'盒':scope.row.productBasic.minPackage == 4?'箱':'其他'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="批号" prop="batchNo" 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">
+ <span>{{scope.row.state === 0 ? '未入库' : '已入库'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" >
+ <template #default="scope">
+ <el-button link type="primary" v-if="scope.row.state == 0" @click="doEntry(scope.row)">入库</el-button>
+ <el-button link type="primary" v-if="scope.row.state == 1" @click="printCode(scope.row)">打印二维码</el-button>
+ <el-button link type="primary" @click="openDialog('edit',scope.row)" v-if="scope.row.state == 0">编辑</el-button>
+ <el-button link type="danger" @click="handleDelete(scope.row)" v-if="scope.row.state == 0">删除</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"
+ />
+ <pro-dialog ref="dialogRef" @getList=getList></pro-dialog>
+ <printcode ref="codeRef" @getList=getList></printcode>
+ </div>
+</template>
+
+<script setup>
+import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
+import {ElMessage, ElMessageBox} from "element-plus";
+import proDialog from "./addProDialog.vue";
+import printcode from './printCode.vue'
+import {delWarehouse, getWarehouse} from "@/api/hazardousChemicals/warehouse";
+import {
+ delProductRecord,
+ doEntryPro,
+ getProductRecord,
+ getProWarehouseRecord
+} from "@/api/hazardousChemicals/productRecord";
+import {delRawRecord} from "@/api/hazardousChemicals/rawRecord";
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const dialogRef = 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(()=>{
+ getList()
+})
+
+const getList = async () => {
+ loading.value = true
+ const res = await getProductRecord(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 delProductRecord(val.id)
+ if(res.code == 200){
+ ElMessage.success('数据删除成功')
+ await getList()
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+const doEntry = (val) => {
+ ElMessageBox.confirm(
+ '确定入库该成品?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await doEntryPro(val.id)
+ if(res.code == 200){
+ ElMessage.success('入库成功')
+ await getList()
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+const printCode = (val) => {
+ console.log("val",val)
+ codeRef.value.openDialog('pro',val);
+
+}
+defineExpose({
+ getList
+});
+
+
+</script>
diff --git a/src/views/hazardousChemicals/warehouseManage/components/rawTable.vue b/src/views/hazardousChemicals/warehouseManage/components/rawTable.vue
new file mode 100644
index 0000000..c2a47f9
--- /dev/null
+++ b/src/views/hazardousChemicals/warehouseManage/components/rawTable.vue
@@ -0,0 +1,183 @@
+<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>
+ <el-button
+ type="primary"
+ plain
+ icon="Plus"
+ @click="openDialog('add',{})"
+ >新增</el-button>
+ </el-form-item>
+ <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="hazmatBasic.name" align="center" />
+ <el-table-column label="产品编号" prop="hazmatBasic.productSn" align="center" />
+ <el-table-column label="CAS号" prop="hazmatBasic.cas" align="center" />
+ <el-table-column label="厂家" prop="hazmatBasic.manufacturer" align="center" />
+ <el-table-column label="供应商" prop="hazmatBasic.supplier" align="center" />
+ <el-table-column label="危险性质" prop="hazmatBasic.hazmatCharacter" align="center" />
+ <el-table-column label="最小包装" align="center" width="120">
+ <template #default="scope">
+ <span>
+ {{scope.row.hazmatBasic.metering}}{{scope.row.hazmatBasic.unit}} / {{scope.row.hazmatBasic.minPackage == 0 ? '瓶' :scope.row.hazmatBasic.minPackage == 1?'袋':scope.row.hazmatBasic.minPackage == 2?'桶 ':scope.row.hazmatBasic.minPackage == 3?'盒':scope.row.hazmatBasic.minPackage == 4?'箱':'其他'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="批号" prop="batchNo" 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">
+ <span>{{scope.row.state === 0 ? '未入库' : '已入库'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" >
+ <template #default="scope">
+ <el-button link type="primary" v-if="scope.row.state == 0" @click="doEntry(scope.row)">入库</el-button>
+ <el-button link type="primary" v-if="scope.row.state == 1" @click="printCode(scope.row)">打印二维码</el-button>
+ <el-button link type="primary" @click="openDialog('edit',scope.row)" v-if="scope.row.state == 0">编辑</el-button>
+ <el-button link type="danger" @click="handleDelete(scope.row)" v-if="scope.row.state == 0">删除</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"
+ />
+
+ <raw-dialog ref="dialogRef" @getList=getList></raw-dialog>
+ <printcode ref="codeRef" @getList=getList></printcode>
+ </div>
+</template>
+
+<script setup>
+import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
+import {ElMessage, ElMessageBox} from "element-plus";
+import rawDialog from "./addRawDialog.vue";
+import printcode from './printCode.vue'
+import {delRawRecord, doEntryRaw, getRawRecord, getRawWarehouseRecord} from "@/api/hazardousChemicals/rawRecord";
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const dialogRef = 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(()=>{
+ getList()
+})
+
+const getList = async () => {
+ loading.value = true
+ const res = await getRawRecord(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 doEntry = (val) => {
+ ElMessageBox.confirm(
+ '确定入库该危化品?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await doEntryRaw(val.id)
+ if(res.code == 200){
+ ElMessage.success('入库成功')
+ await getList()
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+
+const printCode = (val) => {
+ console.log("val",val)
+ codeRef.value.openDialog('raw',val);
+
+}
+defineExpose({
+ getList
+});
+
+</script>
diff --git a/src/views/hazardousChemicals/warehouseManage/index.vue b/src/views/hazardousChemicals/warehouseManage/index.vue
index 8f64b3a..114e99c 100644
--- a/src/views/hazardousChemicals/warehouseManage/index.vue
+++ b/src/views/hazardousChemicals/warehouseManage/index.vue
@@ -1,9 +1,45 @@
<template>
- <div>入库管理</div>
+ <div>
+ <el-tabs v-model="data.activeName" class="demo-tabs" @click="clickTab" style="margin: 10px 10px">
+ <el-tab-pane label="成品" name="finishPro" v-if="showFinishPro">
+ <pro-table ref="proRef"></pro-table>
+ </el-tab-pane>
+ <el-tab-pane label="原材料" name="rawMaterial">
+ <raw-table ref="rawRef"></raw-table>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
</template>
<script setup>
+import {onMounted, reactive, ref} from "vue";
+import proTable from './components/productTable.vue'
+import rawTable from './components/rawTable.vue'
+const showFinishPro = ref(false)
+const proRef = ref()
+const rawRef = ref()
+const data = reactive({
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ },
+ total: 0,
+ dataList: [],
+ activeName: 'finishPro'
+})
+onMounted(()=>{
+ showFinishPro.value = true;
+ data.activeName = showFinishPro.value ? 'finishPro' : 'rawMaterial'
+})
+const clickTab = (tab,event) =>{
+ console.log('tab',data.activeName)
+ if(data.activeName == 'finishPro'){
+ proRef.value.getList()
+ }else {
+ rawRef.value.getList()
+ }
+}
</script>
<style scoped lang="scss">
diff --git a/src/views/homePage.vue b/src/views/homePage.vue
index 73c9b2e..e8e5894 100644
--- a/src/views/homePage.vue
+++ b/src/views/homePage.vue
@@ -58,7 +58,7 @@
<template #prefix><svg-icon icon-class="validCode" class="el-input__icon input-icon" /></template>
</el-input>
<div class="login-code">
- <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+ <img :src="codeUrl" @click="getCode" class="login-code-img" />
</div>
</div>
</el-form-item>
@@ -207,6 +207,7 @@
const openRegist = ()=>{
regRef.value.dialogVisible = true
}
+const imageBase64 = ref('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')
watch(route, (newRoute) => {
redirect.value = newRoute.query && newRoute.query.redirect;
@@ -288,11 +289,13 @@
function getCode() {
getCodeImg().then(res => {
- captchaEnabled.value = res.data.captchaEnabled
- if (captchaEnabled.value) {
- codeUrl.value = "data:image/gif;base64," + res.data.image
+ // captchaEnabled.value = res.data.captchaEnabled
+ // debugger
+ // if (captchaEnabled.value) {
+ codeUrl.value = "data:image/*;base64," + res.data.image
+ console.log('res',codeUrl.value)
loginForm.value.uuid = res.data.uuid
- }
+ // }
});
}
--
Gitblit v1.9.2