From 31ab2edfa500364818d2cc2c30acc1f4ae5b8dac Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: Tue, 20 Aug 2024 17:25:30 +0800
Subject: [PATCH] bug修改
---
src/views/hazardousChemicals/finishedBasicInfo/components/finishedBasicDialog.vue | 2
src/views/hazardousChemicals/accessRecords/index.vue | 8
src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue | 2
src/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue | 57 +
src/layout/components/Sidebar/menu.js | 186 +++-
src/layout/components/Navbar.vue | 2
src/assets/images/logo11.jpg | 0
src/views/hazardousChemicals/homePage/index.vue | 1
src/views/hazardousChemicals/warehouseManage/components/addRawDialog.vue | 4
src/views/hazardousChemicals/warehouseManage/components/proDetail.vue | 42 +
src/views/hazardousChemicals/electronicWarehouse/components/proWarehouseRecord.vue | 2
src/views/hazardousChemicals/systemManage/company/components/companyDialog.vue | 2
src/views/hazardousChemicals/warehouseManage/components/printCode.vue | 25
src/assets/images/index.jpg | 0
src/views/hazardousChemicals/warehouseManage/components/addProDialog.vue | 2
src/views/hazardousChemicals/warehouseManage/components/rawDetail.vue | 39 +
src/layout/components/Sidebar/Logo.vue | 31
src/views/hazardousChemicals/basicInfon/components/basicDialog.vue | 2
src/views/hazardousChemicals/accessRecords/components/productTable.vue | 4
src/views/hazardousChemicals/systemManage/warehouse/components/warehouseDialog.vue | 2
src/views/hazardousChemicals/systemManage/config/components/configDialog.vue | 260 +++++++
src/api/hazardousChemicals/config.js | 49 +
src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue | 2
src/views/hazardousChemicals/warehouseManage/index.vue | 7
src/views/homePage.vue | 35
src/store/modules/user.js | 12
src/assets/images/logo22.png | 0
src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue | 2
src/views/hazardousChemicals/systemManage/config/index.vue | 155 ++++
src/router/index.js | 15
src/views/components/flowDetail.vue | 3
src/views/hazardousChemicals/systemManage/department/components/deptDialog.vue | 2
src/views/hazardousChemicals/accessRecords/components/rawTable.vue | 4
src/views/hazardousChemicals/electronicWarehouse/index.vue | 7
src/views/components/upload.vue | 1014 ++++++++++++++---------------
35 files changed, 1,340 insertions(+), 640 deletions(-)
diff --git a/src/api/hazardousChemicals/config.js b/src/api/hazardousChemicals/config.js
new file mode 100644
index 0000000..d07e6fc
--- /dev/null
+++ b/src/api/hazardousChemicals/config.js
@@ -0,0 +1,49 @@
+import request from "@/utils/request";
+
+export function getConfig(params) {
+ return request({
+ url: '/system/config/list',
+ method: 'get',
+ params: params
+ })
+}
+
+export function addConfig(data) {
+ return request({
+ url: '/system/config',
+ method: 'post',
+ data: data
+ })
+}
+
+export function editConfig(params) {
+ return request({
+ url: `/system/config`,
+ method: 'put',
+ data: params
+ })
+}
+
+export function delConfig(data) {
+ return request({
+ url: `/system/config/` + data,
+ method: 'delete'
+ })
+}
+
+export function getConfigById(params) {
+ return request({
+ url: '/system/config/getConfigByUser',
+ method: 'get',
+ params: params
+ })
+}
+
+export function delPic(path) {
+ return request({
+ url: '/system/common/removeFile',
+ method: 'delete',
+ params: path,
+ timeout: 20000
+ })
+}
diff --git a/src/assets/images/index.jpg b/src/assets/images/index.jpg
new file mode 100644
index 0000000..a0c8b24
--- /dev/null
+++ b/src/assets/images/index.jpg
Binary files differ
diff --git a/src/assets/images/logo11.jpg b/src/assets/images/logo11.jpg
new file mode 100644
index 0000000..bc58177
--- /dev/null
+++ b/src/assets/images/logo11.jpg
Binary files differ
diff --git a/src/assets/images/logo22.png b/src/assets/images/logo22.png
new file mode 100644
index 0000000..d9155fa
--- /dev/null
+++ b/src/assets/images/logo22.png
Binary files differ
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index 46cf6ab..b8c655c 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -120,6 +120,8 @@
type: 'warning'
}).then(() => {
removeToken()
+ Cookies.remove('userInfo')
+ Cookies.remove('configInfo')
location.href = '/homePage';
}).catch(() => { });
diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue
index 7203c7f..1fa61e4 100644
--- a/src/layout/components/Sidebar/Logo.vue
+++ b/src/layout/components/Sidebar/Logo.vue
@@ -1,12 +1,12 @@
<template>
<div class="sidebar-logo-container" :class="{ 'collapse': collapse }" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }">
<transition name="sidebarLogoFade">
- <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="firstPage">
- <img v-if="logo" :src="logo" class="sidebar-logo" />
+ <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" :to="firstPage">
+ <img v-if="logoImg" :src="logoImg" class="sidebar-logo" />
<h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }}</h1>
</router-link>
<router-link v-else key="expand" class="sidebar-logo-link" :to="firstPage">
- <img v-if="logo" :src="logo" class="sidebar-logo" />
+ <img v-if="logoImg" :src="logoImg" class="sidebar-logo" />
<h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }}</h1>
</router-link>
</transition>
@@ -25,10 +25,29 @@
required: true
}
})
+const logoImg = ref('')
const firstPage = ref("");
onMounted(() => {
const routers = JSON.parse(Cookies.get('routers')) ;
- firstPage.value = routers[0].path;
+ if(routers[0].children){
+ firstPage.value = routers[0].path + '/' + routers[0].children[0].path;
+ }else {
+ firstPage.value = routers[0].path;
+ }
+
+ console.log(routers,'firstPage.value')
+ console.log(firstPage.value,'firstPage.value')
+ if(Cookies.get('configInfo')){
+ const config = JSON.parse(Cookies.get('configInfo'))
+ if(config.logoPath != ''){
+ logoImg.value = import.meta.env.VITE_APP_BASE_API + "/" + config.logoPath
+ }else {
+ logoImg.value = logo
+ }
+ }else {
+ logoImg.value = logo
+ }
+
});
const title = import.meta.env.VITE_APP_TITLE;
@@ -62,9 +81,9 @@
& .sidebar-logo {
width: 32px;
- height: 32px;
+ height: auto;
vertical-align: middle;
- //margin-right: 8px;
+ margin-right: 5px;
}
& .sidebar-title {
diff --git a/src/layout/components/Sidebar/menu.js b/src/layout/components/Sidebar/menu.js
index b017f9e..1c88d54 100644
--- a/src/layout/components/Sidebar/menu.js
+++ b/src/layout/components/Sidebar/menu.js
@@ -1,50 +1,45 @@
import Layout from '@/layout'
const menu = {
adminMenu: [
- {
- path: '/homePage',
- redirect: '/homePage',
- meta: { title: '首页',icon: 'server'},
- children: [
-
- {
- path: 'homePage',
- name: 'company',
- meta: { title: '工作台',icon: 'server'}
- } ,
- ]
- },
- {
- path: '/warehouseManage',
- name: 'warehouseManage',
- meta: { title: '入库管理',icon: 'form',affix: true }
- },
-
- {
- path: '/electronicWarehouse',
- name: 'electronicWarehouse',
- meta: { title: '电子仓库',icon: 'build',affix: true }
- },
// {
- // path: '/detailList',
- // name: 'detailList',
- // meta: { title: '危化品详单',icon: 'education',affix: true }
+ // path: '/homePageIndex',
+ // redirect: '/homePageIndex',
+ // meta: { title: '首页',icon: 'server'},
+ // children: [
+ //
+ // {
+ // path: 'homePageIndex',
+ // name: 'homePageIndex',
+ // meta: { title: '工作台',icon: 'server'}
+ // } ,
+ // ]
// },
- {
- path: '/accessRecords',
- name: 'accessRecords',
- meta: { title: '取用记录',icon: 'job',affix: true }
- },
- {
- path: '/traceableQuery',
- name: 'traceableQuery',
- meta: { title: '溯源查询',icon: 'log',affix: true }
- },
- {
- path: '/overdueWarning',
- name: 'overdueWarning',
- meta: { title: '超期预警',icon: 'peoples',affix: true }
- },
+ // {
+ // path: '/warehouseManage',
+ // name: 'warehouseManage',
+ // meta: { title: '入库管理',icon: 'form',affix: true }
+ // },
+ //
+ // {
+ // path: '/electronicWarehouse',
+ // name: 'electronicWarehouse',
+ // meta: { title: '电子仓库',icon: 'build',affix: true }
+ // },
+ // {
+ // path: '/accessRecords',
+ // name: 'accessRecords',
+ // meta: { title: '取用记录',icon: 'job',affix: true }
+ // },
+ // {
+ // path: '/traceableQuery',
+ // name: 'traceableQuery',
+ // meta: { title: '溯源查询',icon: 'log',affix: true }
+ // },
+ // {
+ // path: '/overdueWarning',
+ // name: 'overdueWarning',
+ // meta: { title: '超期预警',icon: 'peoples',affix: true }
+ // },
{
path: '/basicInfo',
name: 'basicInfo',
@@ -60,39 +55,34 @@
redirect: '/systemManage/warehouse',
meta: { title: '系统管理',icon: 'dict'},
children: [
- // {
- // path: 'warehouse',
- // name: 'warehouse',
- // meta: { title: '仓库管理',icon: 'form'}
- // } ,
{
path: 'company',
name: 'company',
meta: { title: '企业管理',icon: 'form'}
} ,
{
+ path: 'config',
+ name: 'config',
+ meta: { title: '企业配置',icon: 'list'}
+ } ,
+ {
path: 'user',
name: 'user',
- meta: { title: '用户管理',icon: 'list'}
+ meta: { title: '用户管理',icon: 'peoples'}
} ,
- // {
- // path: 'department',
- // name: 'department',
- // meta: { title: '部门管理',icon: 'logininfor'}
- // } ,
]
},
],
companyMenu: [
{
- path: '/homePage',
- redirect: '/homePage',
+ path: '/homePageIndex',
+ redirect: '/homePageIndex',
meta: { title: '首页',icon: 'server'},
children: [
{
- path: 'homePage',
- name: 'company',
+ path: 'homePageIndex',
+ name: 'homePageIndex',
meta: { title: '工作台',icon: 'server'}
} ,
]
@@ -165,6 +155,88 @@
]
},
],
+ commonMenu: [
+ {
+ path: '/homePageIndex',
+ redirect: '/homePageIndex',
+ meta: { title: '首页',icon: 'server'},
+ children: [
+
+ {
+ path: 'homePageIndex',
+ name: 'homePageIndex',
+ meta: { title: '工作台',icon: 'server'}
+ } ,
+ ]
+ },
+ {
+ path: '/warehouseManage',
+ name: 'warehouseManage',
+ meta: { title: '入库管理',icon: 'form',affix: true }
+ },
+ {
+ path: '/electronicWarehouse',
+ name: 'electronicWarehouse',
+ meta: { title: '电子仓库',icon: 'build',affix: true }
+ },
+ // {
+ // path: '/detailList',
+ // name: 'detailList',
+ // meta: { title: '危化品详单',icon: 'education',affix: true }
+ // },
+ {
+ path: '/accessRecords',
+ name: 'accessRecords',
+ meta: { title: '取用记录',icon: 'job',affix: true }
+ },
+ {
+ path: '/traceableQuery',
+ name: 'traceableQuery',
+ meta: { title: '溯源查询',icon: 'log',affix: true }
+ },
+ {
+ path: '/overdueWarning',
+ name: 'overdueWarning',
+ meta: { title: '超期预警',icon: 'peoples',affix: true }
+ },
+ {
+ path: '/basicInfo',
+ name: 'basicInfo',
+ meta: { title: '危化品基础信息',icon: 'monitor',affix: true }
+ },
+ {
+ path: '/finishedBasicInfo',
+ name: 'finishedBasicInfo',
+ meta: { title: '成品基础信息',icon: 'monitor',affix: true }
+ },
+ {
+ path: '/systemManage',
+ redirect: '/systemManage/warehouse',
+ meta: { title: '系统管理',icon: 'dict'},
+ children: [
+ {
+ path: 'warehouse',
+ name: 'warehouse',
+ meta: { title: '仓库管理',icon: 'form'}
+ } ,
+ // {
+ // path: 'company',
+ // name: 'company',
+ // meta: { title: '企业管理',icon: 'form'}
+ // } ,
+ // {
+ // path: 'user',
+ // name: 'user',
+ // meta: { title: '用户管理',icon: 'list'}
+ // } ,
+ // {
+ // path: 'department',
+ // name: 'department',
+ // meta: { title: '部门管理',icon: 'logininfor'}
+ // } ,
+ ]
+ },
+ ],
}
export default menu;
diff --git a/src/router/index.js b/src/router/index.js
index ba0aad7..a3afac9 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -209,15 +209,15 @@
]
},
{
- path: '/homePage',
+ path: '/homePageIndex',
component: Layout,
- redirect: '/homePage',
+ redirect: '/homePageIndex',
meta: { title: '首页'},
children: [
{
- path: 'homePage',
+ path: 'homePageIndex',
component: () => import('@/views/hazardousChemicals/homePage/index.vue'),
- name: 'homePage',
+ name: 'homePageIndex',
meta: { title: '工作台',icon: 'form'}
},
]
@@ -252,6 +252,13 @@
name: 'department',
meta: { title: '部门管理',icon: 'form'}
},
+ {
+ path: 'config',
+ component: () => import('@/views/hazardousChemicals/systemManage/config/index.vue'),
+ name: 'config',
+ meta: { title: '企业配置',icon: 'form'}
+ },
+
]
},
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 4451a04..8461d2e 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -3,6 +3,7 @@
import defAva from '@/assets/images/profile.jpg'
import Cookies from "js-cookie";
import {getUserById} from "@/api/hazardousChemicals/user";
+import {getConfigById} from "@/api/hazardousChemicals/config";
const useUserStore = defineStore(
'user',
{
@@ -27,8 +28,15 @@
setToken(res.data.token)
if(res.data && res.data.id){
const info = await getUserById(res.data.id);
- if(info.data.code === 200){}
- Cookies.set('userInfo',JSON.stringify(info.data))
+ if(info.code === 200){
+ Cookies.set('userInfo',JSON.stringify(info.data))
+ }
+ if(info.data.userType != 0){
+ const con = await getConfigById(res.data.companyId);
+ if(con.code === 200){
+ Cookies.set('configInfo',JSON.stringify(con.data))
+ }
+ }
}
this.token = res.data.token
resolve()
diff --git a/src/views/components/flowDetail.vue b/src/views/components/flowDetail.vue
index 6ddfec2..a0dcc6e 100644
--- a/src/views/components/flowDetail.vue
+++ b/src/views/components/flowDetail.vue
@@ -54,7 +54,8 @@
if(type === 'code'){
state.form.code = value
}else {
- state.form = value
+
+ state.form = JSON.parse(JSON.stringify(value))
}
await getAllFlow()
diff --git a/src/views/components/upload.vue b/src/views/components/upload.vue
index 036dc1a..e53ddca 100644
--- a/src/views/components/upload.vue
+++ b/src/views/components/upload.vue
@@ -1,533 +1,495 @@
<template>
- <div class="greetings" v-loading="loading">
- <el-upload accept=".mp4, .mp3, .xls, .xlsx, .doc, .docx, .ppt, .pptx, .pdf" :on-change="handleFileChange" :on-preview="view" :auto-upload="false" ref="uploadfileComponent" :limit="1" :on-exceed="handleExceed" v-model:file-list="fileList">
- <template #trigger>
- <el-button type="primary">选择文件</el-button>
- </template>
- <el-button :disabled="uploadDisabled" style="margin-left: 10px" type="success" @click="handlerUpload">上传</el-button>
- <el-button class="ml-3" type="success" @click="resetData" >重置</el-button>
- <template #tip>
- <br /><br />
- <span>上传进度:{{ fakeUploadPercentage }}%</span>
- <el-progress :text-inside="true" :stroke-width="26" :percentage="fakeUploadPercentage" />
- <div class="el-upload__tip text-red">限制一个文件, 新文件将会覆盖原文件</div>
- </template>
- </el-upload>
- <br>
- <div v-if="container.showVideo" style="width: 300px;height: 200px">
- <video ref="videoPlayer" class="video-js" style="margin: auto auto"></video>
- </div>
+<!-- <div class="greetings" v-loading="loading">-->
+<!-- <el-upload accept=".mp4, .mp3, .xls, .xlsx, .doc, .docx, .ppt, .pptx, .pdf" :on-change="handleFileChange" :on-preview="view" :auto-upload="false" ref="uploadfileComponent" :limit="1" :on-exceed="handleExceed" v-model:file-list="fileList">-->
+<!-- <template #trigger>-->
+<!-- <el-button type="primary">选择文件</el-button>-->
+<!-- </template>-->
+<!-- <el-button :disabled="uploadDisabled" style="margin-left: 10px" type="success" @click="handlerUpload">上传</el-button>-->
+<!-- <el-button class="ml-3" type="success" @click="resetData" >重置</el-button>-->
+<!-- <template #tip>-->
+<!-- <br /><br />-->
+<!-- <span>上传进度:{{ fakeUploadPercentage }}%</span>-->
+<!-- <el-progress :text-inside="true" :stroke-width="26" :percentage="fakeUploadPercentage" />-->
+<!-- <div class="el-upload__tip text-red">限制一个文件, 新文件将会覆盖原文件</div>-->
+<!-- </template>-->
+<!-- </el-upload>-->
+<!-- <br>-->
+<!-- <div v-if="container.showVideo" style="width: 300px;height: 200px">-->
+<!-- <video ref="videoPlayer" class="video-js" style="margin: auto auto"></video>-->
+<!-- </div>-->
- </div>
+<!-- </div>-->
</template>
<script setup>
-import { ElMessage } from "element-plus";
-import videojs from "video.js"
-import { computed, nextTick, onMounted, onUnmounted,ref,reactive,watch } from "vue";
-import SparkMD5 from "spark-md5";
-import {uploadFileRequest,mergeFileRequest} from "@/api/onlineEducation/upload"
-import pLimit from 'p-limit'
-
-const videoPlayer = ref(null)
-const myPlayer = ref(null)
-const uploadDisabled=ref(false)
-const chunkSize = ref(10 * 1024 * 1024) // 切片大小
-const uploadedCount=ref(0) //已上传的分配个数
-const fileChunkList=ref([])
-const fileList=ref([])
-const uploadfileComponent=ref(null)
-const emit = defineEmits(["getFile"]);
-const loading = ref(false)
-const props = defineProps({
- responseType: {
- type: Number,
- default: 0
- }
-})
-const container=reactive({
- file:{
- name:'',
- percentage:0,
- status:1,
- size:0,
- url:'',
- raw:null,
- uid:0
- },
- fileMd5:'',
- worker:null,
- showVideo:false
-})
-// 生成文件hash的进度
-const hashPercentage = ref(0)
-// 显示在页面上的文件上传进度
-const fakeUploadPercentage = ref(0)
-const type = ref();
-onMounted(() => {
- type.value = props.responseType
- // getVideo(props.responseType)
-
-})
-const resourcePath = ref();
-const getVideo = (value) => {
- type.value = value;
- if(value == 1){
- // container.showVideo = true
- nextTick(() => {
- console.log("111111",videoPlayer.value)
- myPlayer.value = videojs(videoPlayer.value, {
- poster: "",//视频封面
- controls: true,//视频控件
- autoplay:true,//自动播放
- sources: [
- {
- src: resourcePath.value ? import.meta.env.VITE_APP_RESOURCE_API + resourcePath.value : '',
- // src:'',
- type: 'application/x-mpegURL',
- }
- ],
- controlBar: {
- remainingTimeDisplay: {
- displayNegative: false
- }
- },
- playbackRates: [0.5, 1, 1.5, 2]//设置播放速度
- }, onPlayerReady)
- });
- }
-}
-// watch(() => props.responseType, value => getVideo(value))
-onUnmounted(() => {
- if (myPlayer.value) {
- myPlayer.value.dispose()
- }
-})
-
-const dispose = () => {
- // if (myPlayer.value) {
- // myPlayer.value.dispose()
- // resourcePath.value = ''
- // }
- container.showVideo = false;
- resourcePath.value = ''
- hashPercentage.value=0
- uploadPercentage.value=0
- fakeUploadPercentage.value=0
- uploadedCount.value=0
- fileChunkList.value=[]
- fileList.value=[]
-}
-
-const changeType = (val) => {
- type.value = val
- dispose()
- if(val == 1){
- container.showVideo = true
- nextTick(() => {
- getVideo(val)
- })
- }
-}
-const openValue = ref();
-const open = (val) => {
- console.log("val",val)
- openValue.value = val
- fakeUploadPercentage.value = 100
- if(val.resourceType == 1){
- container.showVideo = true
- resourcePath.value = val.resourcePath;
- getVideo(val.resourceType)
- }else {
- container.showVideo = false
- // if (myPlayer.value) {
- // myPlayer.value.dispose()
- // }
- fileList.value.push({
- path: val.resourcePath,
- name: val.originName
- })
- }
-}
-const view = (file) => {
- console.log('vlco',file)
- // console.log("点击文件=>", file);
- const url = import.meta.env.VITE_APP_RESOURCE_API + file.path;
- const link = document.createElement("a");
- link.href = url;
- link.download = file.name;
- // link.target = "_blank";
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
-}
-// video初始化完成的回调函数
-const onPlayerReady = () => {
- myPlayer.value.log("play.....")
- bindVideoEvents()
-}
-// 绑定事件
-const bindVideoEvents = () => {
- if (!myPlayer.value) return
- myPlayer.value.on('play', onPlay)
- myPlayer.value.on('pause', onPause)
- myPlayer.value.on('ended', onEnded)
- myPlayer.value.on('timeupdate', onTimeupdate)
- myPlayer.value.on('loadedmetadata', onLoadedmetadata)
- myPlayer.value.on('fullscreenchange', onFullscreenchange)
- myPlayer.value.on('error', err => {
- console.log('视频加载发生错误', err)
- })
-}
-
-const onPlay = () => {
- console.log('播放视频')
-}
-const onPause = () => {
- console.log('暂停播放')
-}
-const onEnded = () => {}
-const onTimeupdate = () => {
- console.log('播放位置已更改时,播放时间更新')
-}
-// 全屏切换
-const onFullscreenchange = () => {
- console.log('全屏状态改变')
-}
-// 元数据加载完成
-const onLoadedmetadata = () => {
- console.log('元数据加载完成')
-
-}
-
-
-//计算文件上传的进度
-const uploadPercentage= computed({
- get(){
- if(!container.file||!fileChunkList.value.length){
- return 0
- }
- const loaded=fileChunkList.value.map(item => item.size * item.percentage).reduce((acc,cur) => {
- return acc+cur
- })
- console.log('loaded',uploadedCount.value,loaded)
- return parseInt((loaded/container.file.size).toFixed(2))
- },
- set(value){
- return value
- }
-})
-
-// watch uploadPercentage,得到fakeUploadPercentage
-watch(uploadPercentage, (newValue) => {
- if (newValue >= fakeUploadPercentage.value) {
- fakeUploadPercentage.value = newValue
- }
-})
-
-const resetData = () => {
- container.showVideo = false
- resourcePath.value = ''
- hashPercentage.value=0
- uploadPercentage.value=0
- fakeUploadPercentage.value=0
- uploadedCount.value=0
- fileChunkList.value=[]
- fileList.value=[]
- if(container.worker){
- container.worker.onmessage=null
- }
- // if (myPlayer.value) {
- // myPlayer.value.dispose()
- // }
- const file = {
- resourceSize: null,
- md5: '',
- resourcePath: '',
- mediaType: '',
- docPage: 0,
- resourceLength: '',
- originName:''
- }
- emit("getFile",file)
-}
-
-//选择了文件
-const handleFileChange=(uploadFile,uploadFiles) =>{
- // resetData()
- if(!uploadFile){
- return
- }
- container.file=uploadFile
- fileList.value=uploadFiles
-}
-
-const handleExceed= (files) => {
- uploadfileComponent.value.clearFiles()
- nextTick(() => {
- uploadfileComponent.value.handleStart(files[0])
- })
-}
-
-//上传
-const handlerUpload= async() => {
-
- if(type.value == null){
- ElMessage({
- type: 'warning',
- message: '请先选择资源类型'
- });
- return false
- }
-
- if(!container.file.raw){
- return
- }
- if(container.file.raw.size > 1024 * 1024 * 1000){
- ElMessage({
- type: 'warning',
- message: '文件大小不能超过1G'
- });
- return false
- }
-
- const filetype = container.file.raw.name.split(".").pop();
- const extension = (filetype === "mp4" || filetype ==="mp3" || filetype ==="xls" || filetype === "xlsx" || filetype ==="doc" || filetype ==="docx" || filetype === "ppt" || filetype ==="pptx" || filetype ==="pdf");
- if (!extension ) {
- ElMessage({
- type: 'warning',
- message: '暂不支持该格式上传'
- });
- return false;
- }
- if((type.value == 1 && filetype != 'mp4') || (type.value == 2 && filetype != 'mp3')){
- ElMessage({
- type: 'warning',
- message: '请上传所选资源类型的文件'
- });
- return false;
- }
- if(type.value == 3){
- if( filetype == 'xls' || filetype == 'xlsx' || filetype == 'doc'|| filetype == 'docx'|| filetype == 'ppt'|| filetype == 'pptx'|| filetype == 'pdf' ){
-
- }else {
- ElMessage({
- type: 'warning',
- message: '请上传所选资源类型的文件'
- });
- return false;
- }
- }
- loading.value = true
- //文件分片
- const chunkList=createFileChunk(container.file.raw)
- console.log('文件分了多少片:',chunkList.length)
- //通过webworker计算出文件hash
- container.fileMd5=await calculateMd5(chunkList)
- console.log('文件hash1:',container.fileMd5)
- // container.fileMd5=await getFileMD5(container.file.raw)
- // console.log('文件hash2:',container.hash)
-
- fileChunkList.value=[]
- fileChunkList.value=chunkList.map(({file},index) => ({
- fileMd5:container.fileMd5,
- index,
- chunkName: `${container.fileMd5}-${index}`,
- chunk:file,
- size:file.size,
- // 如果已上传切片数组uploadedList中包含这个切片,则证明这个切片之前已经上传成功了,进度设为100。
- percentage:0
- }))
-
- uploadChunks(fileChunkList)
-
-}
-
-//文件分片
-const createFileChunk = (file,size=chunkSize.value) => {
- const chunkList=[]
- let cur=0
- while(cur<file.size){
- chunkList.push({
- file:file.slice(cur,cur+size),
- })
- cur+=size
- }
- return chunkList
-}
-
-//计算文件md5 方法1
-const calculateMd5 = (chunkList) => {
- return new Promise((resolve) => {
- container.worker=new Worker('/hash.js')
- container.worker.postMessage({fileChunkList:chunkList})
- container.worker.onmessage= (e) => {
- const {percentage,hash} = e.data
- hashPercentage.value=percentage.toFixed(2)
- if(hash){
- resolve(hash)
- }
- }
- })
-}
-
-//计算文件md5 方法2
-const getFileMD5 = (file) => {
- return new Promise((resolve, reject) => {
- const spark = new SparkMD5.ArrayBuffer()
- const fileReader = new FileReader()
- fileReader.onload = (e) => {
- spark.append(e.target?.result)
- resolve(spark.end())
- }
- fileReader.onerror = () => {
- reject('')
- }
- fileReader.readAsArrayBuffer(file)
- })
-}
-
-//计算上传进度
-const createProgressHandler = (item) => {
- console.log('createProgresshandler -> item', item);
- return (p) => {
- if(item.percentage>=100){
- item.percentage = 100
- }else{
- item.percentage=parseInt(String((p.loaded/p.total)*100))
- }
- // 确保进度百分比不会超过100%
- if (item.percentage > 100) item.percentage = 100
- }
-}
-
-
-
-//上传切片
-const uploadChunks= async(uploadedList) => {
- const limit = pLimit(10); // 控制并发数为10
- const requestList=uploadedList.value.map(({chunk,chunkName,index,fileMd5}) => {
- const formdata=new FormData()
- formdata.append('file',chunk)
- formdata.append('chunkName',chunkName)
- formdata.append('fileName',container.file.name)
- formdata.append('fileMd5',fileMd5)
- formdata.append('index',index)
- return {formdata,index}
- }).map(async ({formdata,index}) => {
- return limit(() => doUploadChunk({data:formdata,onUploadProgress:createProgressHandler(fileChunkList.value[index])}))
- })
- await Promise.all(requestList)
- console.log("数组:",fileChunkList)
- if(uploadedCount.value>=fileChunkList.value.length){
- mergeRequest()
- }
-
-}
-
-
-const doUploadChunk = ({data,onUploadProgress}) => {
- return new Promise((resolve) => {
- uploadFileRequest(data,onUploadProgress).then((result) => {
- let resData=result.data
- if(result&&result.code==200){
- uploadedCount.value=uploadedCount.value+1
- fileChunkList.value[data.get('index')].percentage=100 //手动更新进度
- console.log(uploadedCount.value,'result--------------')
- }
- resolve('done')
- })
- })
-}
-
-const mergeRequest = async() => {
- if(container.file.name.lastIndexOf(".") === -1){
- ElMessage.warning("请输入文件后缀名")
- return
- }
- let data=await mergeFileRequest({fileMd5:container.fileMd5,fileName:container.file.name})
- console.log(data,"mege------------222")
- if(data && data.code==200){
- const filetype = data.data.originName.split(".").pop();
- if(filetype == 'mp4' || filetype == 'MP4'){
- container.showVideo = true
- await nextTick(() => {
-
- console.log("myPlayer.value",myPlayer.value)
- myPlayer.value.src(
- {
- src: import.meta.env.VITE_APP_RESOURCE_API +data.data.path,
- type: 'application/x-mpegURL',
- })
- // myPlayer.value.load()
- myPlayer.value.play().catch((error) => {
- console.error('Error playing video:', error);
- });
- })
- // myPlayer.value.pause()
- //myPlayer.value.reset()
- }
- const file = {
- resourceSize: data.data.size,
- md5: data.data.md5,
- resourcePath: data.data.path,
- mediaType: filetype,
- docPage: data.data.docPage,
- resourceLength: data.data.resourceLength,
- originName: data.data.originName
- }
- emit("getFile",file)
-
-
- loading.value = false
- ElMessage.success("上传成功")
- }else{
- ElMessage.success("合并数据失败")
- }
-}
-
-defineExpose({
- dispose,
- changeType,
- open
-});
+// import { ElMessage } from "element-plus";
+// import videojs from "video.js"
+// import { computed, nextTick, onMounted, onUnmounted,ref,reactive,watch } from "vue";
+// import SparkMD5 from "spark-md5";
+// import {uploadFileRequest,mergeFileRequest} from "@/api/onlineEducation/upload"
+// import pLimit from 'p-limit'
+//
+// const videoPlayer = ref(null)
+// const myPlayer = ref(null)
+// const uploadDisabled=ref(false)
+// const chunkSize = ref(10 * 1024 * 1024) // 切片大小
+// const uploadedCount=ref(0) //已上传的分配个数
+// const fileChunkList=ref([])
+// const fileList=ref([])
+// const uploadfileComponent=ref(null)
+// const emit = defineEmits(["getFile"]);
+// const loading = ref(false)
+// const props = defineProps({
+// responseType: {
+// type: Number,
+// default: 0
+// }
+// })
+// const container=reactive({
+// file:{
+// name:'',
+// percentage:0,
+// status:1,
+// size:0,
+// url:'',
+// raw:null,
+// uid:0
+// },
+// fileMd5:'',
+// worker:null,
+// showVideo:false
+// })
+// // 生成文件hash的进度
+// const hashPercentage = ref(0)
+// // 显示在页面上的文件上传进度
+// const fakeUploadPercentage = ref(0)
+// const type = ref();
+// onMounted(() => {
+// type.value = props.responseType
+// // getVideo(props.responseType)
+//
+// })
+// const resourcePath = ref();
+// const getVideo = (value) => {
+// type.value = value;
+// if(value == 1){
+// // container.showVideo = true
+// nextTick(() => {
+// console.log("111111",videoPlayer.value)
+// myPlayer.value = videojs(videoPlayer.value, {
+// poster: "",//视频封面
+// controls: true,//视频控件
+// autoplay:true,//自动播放
+// sources: [
+// {
+// src: resourcePath.value ? import.meta.env.VITE_APP_RESOURCE_API + resourcePath.value : '',
+// // src:'',
+// type: 'application/x-mpegURL',
+// }
+// ],
+// controlBar: {
+// remainingTimeDisplay: {
+// displayNegative: false
+// }
+// },
+// playbackRates: [0.5, 1, 1.5, 2]//设置播放速度
+// }, onPlayerReady)
+// });
+// }
+// }
+// // watch(() => props.responseType, value => getVideo(value))
+// onUnmounted(() => {
+// if (myPlayer.value) {
+// myPlayer.value.dispose()
+// }
+// })
+//
+// const dispose = () => {
+// // if (myPlayer.value) {
+// // myPlayer.value.dispose()
+// // resourcePath.value = ''
+// // }
+// container.showVideo = false;
+// resourcePath.value = ''
+// hashPercentage.value=0
+// uploadPercentage.value=0
+// fakeUploadPercentage.value=0
+// uploadedCount.value=0
+// fileChunkList.value=[]
+// fileList.value=[]
+// }
+//
+// const changeType = (val) => {
+// type.value = val
+// dispose()
+// if(val == 1){
+// container.showVideo = true
+// nextTick(() => {
+// getVideo(val)
+// })
+// }
+// }
+// const openValue = ref();
+// const open = (val) => {
+// console.log("val",val)
+// openValue.value = val
+// fakeUploadPercentage.value = 100
+// if(val.resourceType == 1){
+// container.showVideo = true
+// resourcePath.value = val.resourcePath;
+// getVideo(val.resourceType)
+// }else {
+// container.showVideo = false
+// // if (myPlayer.value) {
+// // myPlayer.value.dispose()
+// // }
+// fileList.value.push({
+// path: val.resourcePath,
+// name: val.originName
+// })
+// }
+// }
+// const view = (file) => {
+// console.log('vlco',file)
+// // console.log("点击文件=>", file);
+// const url = import.meta.env.VITE_APP_RESOURCE_API + file.path;
+// const link = document.createElement("a");
+// link.href = url;
+// link.download = file.name;
+// // link.target = "_blank";
+// document.body.appendChild(link);
+// link.click();
+// document.body.removeChild(link);
+// }
+// // video初始化完成的回调函数
+// const onPlayerReady = () => {
+// myPlayer.value.log("play.....")
+// bindVideoEvents()
+// }
+// // 绑定事件
+// const bindVideoEvents = () => {
+// if (!myPlayer.value) return
+// myPlayer.value.on('play', onPlay)
+// myPlayer.value.on('pause', onPause)
+// myPlayer.value.on('ended', onEnded)
+// myPlayer.value.on('timeupdate', onTimeupdate)
+// myPlayer.value.on('loadedmetadata', onLoadedmetadata)
+// myPlayer.value.on('fullscreenchange', onFullscreenchange)
+// myPlayer.value.on('error', err => {
+// console.log('视频加载发生错误', err)
+// })
+// }
+//
+// const onPlay = () => {
+// console.log('播放视频')
+// }
+// const onPause = () => {
+// console.log('暂停播放')
+// }
+// const onEnded = () => {}
+// const onTimeupdate = () => {
+// console.log('播放位置已更改时,播放时间更新')
+// }
+// // 全屏切换
+// const onFullscreenchange = () => {
+// console.log('全屏状态改变')
+// }
+// // 元数据加载完成
+// const onLoadedmetadata = () => {
+// console.log('元数据加载完成')
+//
+// }
+//
+//
+// //计算文件上传的进度
+// const uploadPercentage= computed({
+// get(){
+// if(!container.file||!fileChunkList.value.length){
+// return 0
+// }
+// const loaded=fileChunkList.value.map(item => item.size * item.percentage).reduce((acc,cur) => {
+// return acc+cur
+// })
+// console.log('loaded',uploadedCount.value,loaded)
+// return parseInt((loaded/container.file.size).toFixed(2))
+// },
+// set(value){
+// return value
+// }
+// })
+//
+// // watch uploadPercentage,得到fakeUploadPercentage
+// watch(uploadPercentage, (newValue) => {
+// if (newValue >= fakeUploadPercentage.value) {
+// fakeUploadPercentage.value = newValue
+// }
+// })
+//
+// const resetData = () => {
+// container.showVideo = false
+// resourcePath.value = ''
+// hashPercentage.value=0
+// uploadPercentage.value=0
+// fakeUploadPercentage.value=0
+// uploadedCount.value=0
+// fileChunkList.value=[]
+// fileList.value=[]
+// if(container.worker){
+// container.worker.onmessage=null
+// }
+// // if (myPlayer.value) {
+// // myPlayer.value.dispose()
+// // }
+// const file = {
+// resourceSize: null,
+// md5: '',
+// resourcePath: '',
+// mediaType: '',
+// docPage: 0,
+// resourceLength: '',
+// originName:''
+// }
+// emit("getFile",file)
+// }
+//
+// //选择了文件
+// const handleFileChange=(uploadFile,uploadFiles) =>{
+// // resetData()
+// if(!uploadFile){
+// return
+// }
+// container.file=uploadFile
+// fileList.value=uploadFiles
+// }
+//
+// const handleExceed= (files) => {
+// uploadfileComponent.value.clearFiles()
+// nextTick(() => {
+// uploadfileComponent.value.handleStart(files[0])
+// })
+// }
+//
+// //上传
+// const handlerUpload= async() => {
+//
+// if(type.value == null){
+// ElMessage({
+// type: 'warning',
+// message: '请先选择资源类型'
+// });
+// return false
+// }
+//
+// if(!container.file.raw){
+// return
+// }
+// if(container.file.raw.size > 1024 * 1024 * 1000){
+// ElMessage({
+// type: 'warning',
+// message: '文件大小不能超过1G'
+// });
+// return false
+// }
+//
+// const filetype = container.file.raw.name.split(".").pop();
+// const extension = (filetype === "mp4" || filetype ==="mp3" || filetype ==="xls" || filetype === "xlsx" || filetype ==="doc" || filetype ==="docx" || filetype === "ppt" || filetype ==="pptx" || filetype ==="pdf");
+// if (!extension ) {
+// ElMessage({
+// type: 'warning',
+// message: '暂不支持该格式上传'
+// });
+// return false;
+// }
+// if((type.value == 1 && filetype != 'mp4') || (type.value == 2 && filetype != 'mp3')){
+// ElMessage({
+// type: 'warning',
+// message: '请上传所选资源类型的文件'
+// });
+// return false;
+// }
+// if(type.value == 3){
+// if( filetype == 'xls' || filetype == 'xlsx' || filetype == 'doc'|| filetype == 'docx'|| filetype == 'ppt'|| filetype == 'pptx'|| filetype == 'pdf' ){
+//
+// }else {
+// ElMessage({
+// type: 'warning',
+// message: '请上传所选资源类型的文件'
+// });
+// return false;
+// }
+// }
+// loading.value = true
+// //文件分片
+// const chunkList=createFileChunk(container.file.raw)
+// console.log('文件分了多少片:',chunkList.length)
+// //通过webworker计算出文件hash
+// container.fileMd5=await calculateMd5(chunkList)
+// console.log('文件hash1:',container.fileMd5)
+// // container.fileMd5=await getFileMD5(container.file.raw)
+// // console.log('文件hash2:',container.hash)
+//
+// fileChunkList.value=[]
+// fileChunkList.value=chunkList.map(({file},index) => ({
+// fileMd5:container.fileMd5,
+// index,
+// chunkName: `${container.fileMd5}-${index}`,
+// chunk:file,
+// size:file.size,
+// // 如果已上传切片数组uploadedList中包含这个切片,则证明这个切片之前已经上传成功了,进度设为100。
+// percentage:0
+// }))
+//
+// uploadChunks(fileChunkList)
+//
+// }
+//
+// //文件分片
+// const createFileChunk = (file,size=chunkSize.value) => {
+// const chunkList=[]
+// let cur=0
+// while(cur<file.size){
+// chunkList.push({
+// file:file.slice(cur,cur+size),
+// })
+// cur+=size
+// }
+// return chunkList
+// }
+//
+// //计算文件md5 方法1
+// const calculateMd5 = (chunkList) => {
+// return new Promise((resolve) => {
+// container.worker=new Worker('/hash.js')
+// container.worker.postMessage({fileChunkList:chunkList})
+// container.worker.onmessage= (e) => {
+// const {percentage,hash} = e.data
+// hashPercentage.value=percentage.toFixed(2)
+// if(hash){
+// resolve(hash)
+// }
+// }
+// })
+// }
+//
+// //计算文件md5 方法2
+// const getFileMD5 = (file) => {
+// return new Promise((resolve, reject) => {
+// const spark = new SparkMD5.ArrayBuffer()
+// const fileReader = new FileReader()
+// fileReader.onload = (e) => {
+// spark.append(e.target?.result)
+// resolve(spark.end())
+// }
+// fileReader.onerror = () => {
+// reject('')
+// }
+// fileReader.readAsArrayBuffer(file)
+// })
+// }
+//
+// //计算上传进度
+// const createProgressHandler = (item) => {
+// console.log('createProgresshandler -> item', item);
+// return (p) => {
+// if(item.percentage>=100){
+// item.percentage = 100
+// }else{
+// item.percentage=parseInt(String((p.loaded/p.total)*100))
+// }
+// // 确保进度百分比不会超过100%
+// if (item.percentage > 100) item.percentage = 100
+// }
+// }
+//
+//
+//
+// //上传切片
+// const uploadChunks= async(uploadedList) => {
+// const limit = pLimit(10); // 控制并发数为10
+// const requestList=uploadedList.value.map(({chunk,chunkName,index,fileMd5}) => {
+// const formdata=new FormData()
+// formdata.append('file',chunk)
+// formdata.append('chunkName',chunkName)
+// formdata.append('fileName',container.file.name)
+// formdata.append('fileMd5',fileMd5)
+// formdata.append('index',index)
+// return {formdata,index}
+// }).map(async ({formdata,index}) => {
+// return limit(() => doUploadChunk({data:formdata,onUploadProgress:createProgressHandler(fileChunkList.value[index])}))
+// })
+// await Promise.all(requestList)
+// console.log("数组:",fileChunkList)
+// if(uploadedCount.value>=fileChunkList.value.length){
+// mergeRequest()
+// }
+//
+// }
+//
+//
+// const doUploadChunk = ({data,onUploadProgress}) => {
+// return new Promise((resolve) => {
+// uploadFileRequest(data,onUploadProgress).then((result) => {
+// let resData=result.data
+// if(result&&result.code==200){
+// uploadedCount.value=uploadedCount.value+1
+// fileChunkList.value[data.get('index')].percentage=100 //手动更新进度
+// console.log(uploadedCount.value,'result--------------')
+// }
+// resolve('done')
+// })
+// })
+// }
+//
+// const mergeRequest = async() => {
+// if(container.file.name.lastIndexOf(".") === -1){
+// ElMessage.warning("请输入文件后缀名")
+// return
+// }
+// let data=await mergeFileRequest({fileMd5:container.fileMd5,fileName:container.file.name})
+// console.log(data,"mege------------222")
+// if(data && data.code==200){
+// const filetype = data.data.originName.split(".").pop();
+// if(filetype == 'mp4' || filetype == 'MP4'){
+// container.showVideo = true
+// await nextTick(() => {
+//
+// console.log("myPlayer.value",myPlayer.value)
+// myPlayer.value.src(
+// {
+// src: import.meta.env.VITE_APP_RESOURCE_API +data.data.path,
+// type: 'application/x-mpegURL',
+// })
+// // myPlayer.value.load()
+// myPlayer.value.play().catch((error) => {
+// console.error('Error playing video:', error);
+// });
+// })
+// // myPlayer.value.pause()
+// //myPlayer.value.reset()
+// }
+// const file = {
+// resourceSize: data.data.size,
+// md5: data.data.md5,
+// resourcePath: data.data.path,
+// mediaType: filetype,
+// docPage: data.data.docPage,
+// resourceLength: data.data.resourceLength,
+// originName: data.data.originName
+// }
+// emit("getFile",file)
+//
+//
+// loading.value = false
+// ElMessage.success("上传成功")
+// }else{
+// ElMessage.success("合并数据失败")
+// }
+// }
+//
+// defineExpose({
+// dispose,
+// changeType,
+// open
+// });
</script>
-
-
-<style scoped>
-.greetings{
- :deep(.video-js) {
- width: 300px;
- height: 200px;
- }
- :deep(.el-icon--close) {
- display: none;
- }
-}
-
-
-
-h1 {
- font-weight: 500;
- font-size: 2.6rem;
- position: relative;
- top: -10px;
-}
-
-h3 {
- font-size: 1.2rem;
-}
-
-.greetings h1,
-.greetings h3 {
- text-align: center;
-}
-
-@media (min-width: 1024px) {
- .greetings h1,
- .greetings h3 {
- text-align: left;
- }
-}
-</style>
diff --git a/src/views/hazardousChemicals/accessRecords/components/productTable.vue b/src/views/hazardousChemicals/accessRecords/components/productTable.vue
index 4e28a68..30f8ddb 100644
--- a/src/views/hazardousChemicals/accessRecords/components/productTable.vue
+++ b/src/views/hazardousChemicals/accessRecords/components/productTable.vue
@@ -30,7 +30,7 @@
<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>
+ <span>{{scope.row.state === 0 ? '入库' :scope.row.state === 1 ? '取用' :scope.row.state === 2 ? '归还' : scope.row.state === 3? '标签作废':scope.row.state === 4 ? '用尽登记':scope.row.state === 5? '销售': ''}}</span>
</template>
</el-table-column>
<el-table-column label="数量" prop="num" align="center" width="120" >
@@ -56,7 +56,7 @@
<el-dialog
v-model="dialogVisible"
- width="600px"
+ width="650px"
:before-close="handleClose"
:close-on-press-escape="false"
:close-on-click-modal="false"
diff --git a/src/views/hazardousChemicals/accessRecords/components/rawTable.vue b/src/views/hazardousChemicals/accessRecords/components/rawTable.vue
index 8ecba7f..4e7c531 100644
--- a/src/views/hazardousChemicals/accessRecords/components/rawTable.vue
+++ b/src/views/hazardousChemicals/accessRecords/components/rawTable.vue
@@ -30,7 +30,7 @@
<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>
+ <span>{{scope.row.state === 0 ? '入库' :scope.row.state === 1 ? '取用' :scope.row.state === 2 ? '归还' : scope.row.state === 3? '标签作废':scope.row.state === 4 ? '用尽登记':scope.row.state === 5? '销售': ''}}</span>
</template>
</el-table-column>
<el-table-column label="数量" prop="num" align="center" width="120" >
@@ -56,7 +56,7 @@
/>
<el-dialog
v-model="dialogVisible"
- width="600px"
+ width="650px"
:before-close="handleClose"
:close-on-press-escape="false"
:close-on-click-modal="false"
diff --git a/src/views/hazardousChemicals/accessRecords/index.vue b/src/views/hazardousChemicals/accessRecords/index.vue
index 107d30d..5818635 100644
--- a/src/views/hazardousChemicals/accessRecords/index.vue
+++ b/src/views/hazardousChemicals/accessRecords/index.vue
@@ -15,6 +15,7 @@
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()
@@ -30,7 +31,12 @@
})
onMounted(()=>{
- showFinishPro.value = true;
+ if(Cookies.get('configInfo')){
+ const config = JSON.parse(Cookies.get('configInfo'))
+ showFinishPro.value = config.useProd === 1;
+ }else {
+ showFinishPro.value = true
+ }
// data.activeName = showFinishPro.value ? 'finishPro' : 'rawMaterial'
})
const clickTab = (tab,event) =>{
diff --git a/src/views/hazardousChemicals/basicInfon/components/basicDialog.vue b/src/views/hazardousChemicals/basicInfon/components/basicDialog.vue
index 713f83d..776767b 100644
--- a/src/views/hazardousChemicals/basicInfon/components/basicDialog.vue
+++ b/src/views/hazardousChemicals/basicInfon/components/basicDialog.vue
@@ -328,7 +328,7 @@
t.value = type
title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '' ;
if(type === 'edit' || type === 'distribute') {
- state.form = value;
+ state.form = JSON.parse(JSON.stringify(value));
state.characterList = state.form.hazmatCharacter.split(',')
startUsername.value = value.productSn
}
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue b/src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue
index 640a3f6..cb696d6 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/proDetail.vue
@@ -82,7 +82,7 @@
<viewQRcode ref="dialogRef" @getList="getList"></viewQRcode>
<el-dialog
v-model="dialogVisible"
- width="600px"
+ width="650px"
:before-close="handleClose"
:close-on-press-escape="false"
:close-on-click-modal="false"
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/proWarehouseRecord.vue b/src/views/hazardousChemicals/electronicWarehouse/components/proWarehouseRecord.vue
index db14e34..e65510a 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/proWarehouseRecord.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/proWarehouseRecord.vue
@@ -61,7 +61,7 @@
const openDialog = async (value) => {
title.value = value.productBasic.name + ' ' + '(编号:' + value.productBasic.productSn + ')' + ' '+ '的取用记录'
- state.form = value;
+ state.form = JSON.parse(JSON.stringify(value));
await getRecord()
dialogVisible.value = true;
}
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue b/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue
index a970615..6756fd2 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/rawDetail.vue
@@ -82,7 +82,7 @@
<viewQRcode ref="dialogRef" @getList="getList"></viewQRcode>
<el-dialog
v-model="dialogVisible"
- width="600px"
+ width="650px"
:before-close="handleClose"
:close-on-press-escape="false"
:close-on-click-modal="false"
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue b/src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue
index cbe3ff6..811e2ec 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/rawWarehouseRecord.vue
@@ -58,7 +58,7 @@
const openDialog = async (value) => {
title.value = value.hazmatBasic.name + ' ' + '(编号:' + value.hazmatBasic.productSn + ')' + ' '+ '的取用记录'
- state.form = value;
+ state.form = JSON.parse(JSON.stringify(value));
await getRecord()
dialogVisible.value = true;
}
diff --git a/src/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue b/src/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue
index a7dd3b3..a8d90a8 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue
@@ -7,11 +7,16 @@
:close-on-press-escape="false"
:close-on-click-modal="false"
>
+ <div style="display: flex;flex-direction: column;align-items: flex-end">
+ <el-button type="primary" style="margin-bottom: 5px" @click="printCode">打印</el-button>
+ </div>
<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 :id="state.form.code">
+ <div style="display: flex;flex-direction: column;align-items: center;font-size: 16px;">
+ <span>{{title}}</span>
+ <vue-qr :size="85" :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>
</div>
</el-card>
</el-dialog>
@@ -39,13 +44,55 @@
title.value = value.hazmatBasic.name + ' ' + '—' + ' '+ value.hazmatBasic.productSn
}
- state.form = value;
+ state.form = JSON.parse(JSON.stringify(value));
dialogVisible.value = true;
}
const handleClose = () => {
dialogVisible.value = false;
emit("getList")
}
+const printCode = () => {
+ let data = []
+ data = [state.form]
+ 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()
+ //在打印窗口中调用打印功能
+ console.log('printFrame.contentWindow.document.body.style',printFrame.contentWindow.document.body.style)
+ printFrame.contentWindow.print()
+ //移除隐藏的iframe元素
+ document.body.removeChild(printFrame)
+ // handleClose()
+}
+
defineExpose({
openDialog
});
diff --git a/src/views/hazardousChemicals/electronicWarehouse/index.vue b/src/views/hazardousChemicals/electronicWarehouse/index.vue
index a83ed85..61db211 100644
--- a/src/views/hazardousChemicals/electronicWarehouse/index.vue
+++ b/src/views/hazardousChemicals/electronicWarehouse/index.vue
@@ -30,7 +30,12 @@
})
onMounted(()=>{
- showFinishPro.value = true;
+ if(Cookies.get('configInfo')){
+ const config = JSON.parse(Cookies.get('configInfo'))
+ showFinishPro.value = config.useProd === 1;
+ }else {
+ showFinishPro.value = true
+ }
if(Cookies.get('type')){
data.activeName = showFinishPro.value && Cookies.get('type') ==='pro' ? 'finishPro' : 'rawMaterial'
}else{
diff --git a/src/views/hazardousChemicals/finishedBasicInfo/components/finishedBasicDialog.vue b/src/views/hazardousChemicals/finishedBasicInfo/components/finishedBasicDialog.vue
index d91469c..55ed981 100644
--- a/src/views/hazardousChemicals/finishedBasicInfo/components/finishedBasicDialog.vue
+++ b/src/views/hazardousChemicals/finishedBasicInfo/components/finishedBasicDialog.vue
@@ -329,7 +329,7 @@
t.value = type
title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '' ;
if(type === 'edit' || type === 'distribute') {
- state.form = value;
+ state.form = JSON.parse(JSON.stringify(value));
state.characterList = state.form.productCharacter.split(',')
startUsername.value = value.productSn
}
diff --git a/src/views/hazardousChemicals/homePage/index.vue b/src/views/hazardousChemicals/homePage/index.vue
index b2975db..7c6eed3 100644
--- a/src/views/hazardousChemicals/homePage/index.vue
+++ b/src/views/hazardousChemicals/homePage/index.vue
@@ -186,6 +186,7 @@
description: `${item.createName} 领用了 ${item.hazmatBasic.name} 状态:${item.state ==0?'未处理':'已处理' }`
}
})
+ data.warningData = data.warningData.filter(item => item.state === 0)
}else{
ElMessage.warning(res.message)
}
diff --git a/src/views/hazardousChemicals/systemManage/company/components/companyDialog.vue b/src/views/hazardousChemicals/systemManage/company/components/companyDialog.vue
index 554c85b..28908ad 100644
--- a/src/views/hazardousChemicals/systemManage/company/components/companyDialog.vue
+++ b/src/views/hazardousChemicals/systemManage/company/components/companyDialog.vue
@@ -105,7 +105,7 @@
title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '分配课时' ;
if(type === 'edit' || type === 'distribute') {
- state.form = value;
+ state.form = JSON.parse(JSON.stringify(value));
startUsername.value = value.username
startPhone.value = value.phone
}
diff --git a/src/views/hazardousChemicals/systemManage/config/components/configDialog.vue b/src/views/hazardousChemicals/systemManage/config/components/configDialog.vue
new file mode 100644
index 0000000..8082c6f
--- /dev/null
+++ b/src/views/hazardousChemicals/systemManage/config/components/configDialog.vue
@@ -0,0 +1,260 @@
+<template>
+ <div class="notice">
+ <el-dialog
+ v-model="dialogVisible"
+ :title="title"
+ width="500px"
+ :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="companyName" >
+ <el-select
+ clearable
+ v-model="state.form.companyName"
+ filterable
+ remote
+ @change="selectValue"
+ reserve-keyword
+ placeholder="请输入企业名称"
+ remote-show-suffix
+ :remote-method="getCompanyList"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in state.companyList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.name"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="是否使用成品:" prop="useProd" >
+ <el-radio-group v-model="state.form.useProd">
+ <el-radio :label="0">不使用</el-radio>
+ <el-radio :label="1">使用</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="logo:" prop="logoPath" >
+ <el-upload accept="image/*" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" :on-exceed="showTip" :limit='state.imgLimit' v-model:file-list="state.imgList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles)" >
+ <el-icon><Plus /></el-icon>
+ <template #tip>
+ <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传1张,建议宽度30px左右。</div>
+ </template>
+ </el-upload>
+ </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} from "@/api/hazardousChemicals/warehouse";
+import {verifyPhone} from "@/utils/validate";
+import {checkBasicName} from "@/api/hazardousChemicals/basicInfo";
+import {addConfig, editConfig} from "@/api/hazardousChemicals/config";
+import {getCompany} from "@/api/hazardousChemicals/company";
+import {getToken} from "@/utils/auth";
+import {delPic} from "@/api/hazardousChemicals/config";
+
+const dialogVisible = ref(false);
+const title = ref("");
+const busRef = ref();
+const length = ref()
+const emit = defineEmits(["getList"]);
+const state = reactive({
+ form: {
+ id: '',
+ companyId: null,
+ companyName: '',
+ logoPath: '',
+ useProd: 0
+
+ },
+ companyList: [],
+ formRules:{
+ companyName: [{ required: true, message: '请选择企业', trigger: 'blur' }],
+ useProd: [{ required: true, message: '请选择是否使用成品', trigger: 'blur' }],
+ },
+ uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile',
+ header: {
+ Authorization:getToken()
+ },
+ imgList: [],
+ imgLimit: 1,
+})
+
+
+const openDialog = async (type, value) => {
+ await getCompanyList("")
+ title.value = type === 'add' ? '新增配置' : type ==='edit' ? '编辑配置':'' ;
+ if(type === 'edit' ) {
+ state.form = JSON.parse(JSON.stringify(value));
+ if(value.logoPath) {
+ const obj = {
+ url: import.meta.env.VITE_APP_BASE_API + "/" + value.logoPath,
+ name: ''
+ }
+ state.imgList = [obj]
+ }
+ }
+ dialogVisible.value = true;
+}
+
+const onSubmit = async () => {
+ const valid = await busRef.value.validate();
+ if(valid){
+ if(title.value === '新增配置'){
+ const {id, ...data} = JSON.parse(JSON.stringify(state.form))
+ const res = await addConfig(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 === '编辑配置'){
+ const {...data} = JSON.parse(JSON.stringify(state.form))
+ const res = await editConfig(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '编辑成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ busRef.value.clearValidate();
+ reset();
+ dialogVisible.value = false;
+ }
+ }
+}
+
+const selectValue = (val) => {
+ state.companyList.forEach(item => {
+ if(item.name === val){
+ state.form.companyId = item.id
+ }
+ })
+}
+const getCompanyList = async (val)=>{
+ if(val != ""){
+ const queryParams = {
+ name: val
+ }
+ const res = await getCompany(queryParams)
+ if (res.code == 200) {
+ state.companyList = res.data.list
+
+ } else {
+ ElMessage.warning(res.message)
+ }
+ }else {
+
+ const queryParams = {
+ pageNum: 1,
+ pageSize: 10
+ }
+ const res = await getCompany(queryParams)
+ if (res.code == 200) {
+ state.companyList = res.data.list
+
+ } else {
+ ElMessage.warning(res.message)
+ }
+ }
+}
+const handleClose = () => {
+ busRef.value.clearValidate();
+ reset();
+ dialogVisible.value = false;
+ emit("getList")
+}
+
+const showTip =()=>{
+ ElMessage({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+}
+const picSize = async (rawFile) => {
+ if(rawFile.size / 1024 / 1024 > 5){
+ ElMessage({
+ type: 'warning',
+ message: '文件大小不能超过5M'
+ });
+ return false
+ }
+};
+const handleAvatarSuccess = (res, uploadFile) => {
+ if(res.code == 200){
+ state.form.logoPath = res.data.path
+ }else{
+ state.imgList = []
+ ElMessage({
+ type: 'warning',
+ message: '文件上传失败'
+ })
+ }
+}
+const handleRemove = async (file, uploadFiles) => {
+ let path = state.form.logoPath;
+ await delPic({path: path}).then(res => {
+ if(res.code == 200){
+ // ElMessage({
+ // type: 'success',
+ // message: '文件已删除'
+ // })
+ state.form.logoPath = ''
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.message
+ })
+ }
+ }).catch(() => {
+ state.form.logoPath = ''
+ });
+}
+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/systemManage/config/index.vue b/src/views/hazardousChemicals/systemManage/config/index.vue
new file mode 100644
index 0000000..a381fb3
--- /dev/null
+++ b/src/views/hazardousChemicals/systemManage/config/index.vue
@@ -0,0 +1,155 @@
+<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="请输入公司名称"></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="companyName" align="center" />
+ <el-table-column label="Logo" prop="remark" align="center" width="150">
+ <template #default="scope">
+ <div class="demo-image__preview" v-if="scope.row.imgUrl && scope.row.imgUrl.length>0">
+ <el-image
+ style="width: auto; height: auto"
+ :src= "scope.row.imgUrl[0]"
+ :zoom-rate="1.2"
+ :max-scale="7"
+ :min-scale="0.2"
+ :preview-src-list="scope.row.imgUrl"
+ :initial-index="0"
+ fit="cover"
+ :preview-teleported=true
+ />
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column label="是否使用成品" prop="useProd" align="center">
+ <template #default="scope">
+ <span>{{scope.row.useProd == 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="openDialog('edit',scope.row)">编辑</el-button>
+ <el-button link type="danger" @click="handleDelete(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"
+ />
+ <con-dialog ref="dialogRef" @getList="getList"></con-dialog>
+
+
+ </div>
+</template>
+
+<script setup>
+import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
+import {ElMessage, ElMessageBox} from "element-plus";
+import conDialog from './components/configDialog.vue'
+import {delWarehouse, getWarehouse} from "@/api/hazardousChemicals/warehouse";
+import {delConfig, getConfig} from "@/api/hazardousChemicals/config";
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const dialogRef = ref();
+const data = reactive({
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ name: ''
+ },
+ total: 0,
+ dataList: []
+});
+
+const { queryParams, total, dataList } = toRefs(data);
+const classHourRef = ref();
+onMounted(()=>{
+ getList()
+})
+
+onUnmounted(()=>{
+
+})
+
+const getList = async () => {
+ loading.value = true
+ const res = await getConfig(data.queryParams)
+ if(res.code == 200){
+ data.dataList = res.data.list.map(item => {
+ return {
+ ...item,
+ imgUrl: item.logoPath ?[import.meta.env.VITE_APP_BASE_API + "/" + item.logoPath] : []
+ }
+ })
+ 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: ''
+ }
+ getList()
+}
+const handleDelete = (val) => {
+ ElMessageBox.confirm(
+ '确定删除此条数据?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await delConfig(val.id)
+ if(res.code == 200){
+ ElMessage.success('数据删除成功')
+ await getList()
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+
+
+</script>
diff --git a/src/views/hazardousChemicals/systemManage/department/components/deptDialog.vue b/src/views/hazardousChemicals/systemManage/department/components/deptDialog.vue
index 0397087..3025696 100644
--- a/src/views/hazardousChemicals/systemManage/department/components/deptDialog.vue
+++ b/src/views/hazardousChemicals/systemManage/department/components/deptDialog.vue
@@ -113,7 +113,7 @@
title.value = type === 'addFirst' || type === 'add' ? '新增部门' : type ==='edit' ? '编辑部门' : '' ;
if(type === 'edit') {
state.isFirst = true;
- state.form = value;
+ state.form = JSON.parse(JSON.stringify(value));
state.form.status = value.status == 0;
state.form.sort = value.sort;
state.form.parentId = value.parentId;
diff --git a/src/views/hazardousChemicals/systemManage/warehouse/components/warehouseDialog.vue b/src/views/hazardousChemicals/systemManage/warehouse/components/warehouseDialog.vue
index 65b93e1..89cb169 100644
--- a/src/views/hazardousChemicals/systemManage/warehouse/components/warehouseDialog.vue
+++ b/src/views/hazardousChemicals/systemManage/warehouse/components/warehouseDialog.vue
@@ -82,7 +82,7 @@
title.value = type === 'add' ? '新增仓库' : type ==='edit' ? '编辑仓库':'' ;
if(type === 'edit' ) {
- state.form = value;
+ state.form = JSON.parse(JSON.stringify(value));
startUsername.value = value.username
}
dialogVisible.value = true;
diff --git a/src/views/hazardousChemicals/warehouseManage/components/addProDialog.vue b/src/views/hazardousChemicals/warehouseManage/components/addProDialog.vue
index 2ef85b4..caa5174 100644
--- a/src/views/hazardousChemicals/warehouseManage/components/addProDialog.vue
+++ b/src/views/hazardousChemicals/warehouseManage/components/addProDialog.vue
@@ -111,7 +111,7 @@
const openDialog = async (type, value) => {
await getProBasic("")
await getWareHouseList("")
- state.form.batchNo = moment(new Date()).format("YYYY-MM-DD")
+ state.form.batchNo = moment(new Date()).format("YYYYMMDD")
title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑':'' ;
if(type === 'edit' ) {
state.form = value;
diff --git a/src/views/hazardousChemicals/warehouseManage/components/addRawDialog.vue b/src/views/hazardousChemicals/warehouseManage/components/addRawDialog.vue
index 42daf42..d90e308 100644
--- a/src/views/hazardousChemicals/warehouseManage/components/addRawDialog.vue
+++ b/src/views/hazardousChemicals/warehouseManage/components/addRawDialog.vue
@@ -117,10 +117,10 @@
const openDialog = async (type, value) => {
await getRawBasicList("")
await getWareHouseList("")
- state.form.batchNo = moment(new Date()).format("YYYY-MM-DD")
+ state.form.batchNo = moment(new Date()).format("YYYYMMDD")
title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑':'' ;
if(type === 'edit' ) {
- state.form = value;
+ state.form = JSON.parse(JSON.stringify(value));
state.form.basicName = value.hazmatBasic.name
state.form.warehouseName = value.warehouse.name;
choosePro.value = value.hazmatBasic
diff --git a/src/views/hazardousChemicals/warehouseManage/components/printCode.vue b/src/views/hazardousChemicals/warehouseManage/components/printCode.vue
index cfb3a63..d52ee4f 100644
--- a/src/views/hazardousChemicals/warehouseManage/components/printCode.vue
+++ b/src/views/hazardousChemicals/warehouseManage/components/printCode.vue
@@ -3,7 +3,7 @@
<el-dialog
v-model="dialogVisible"
:title="title == 'pro' ? '成品二维码打印' : '危化品二维码打印'"
- width="600px"
+ width="650px"
:before-close="handleClose"
:close-on-press-escape="false"
:close-on-click-modal="false"
@@ -63,8 +63,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";
+import {getProDetail, getProductRecord, getWhProDetail} from "@/api/hazardousChemicals/productRecord";
+import {getRawDetail, getWhRawDetail} from "@/api/hazardousChemicals/rawRecord";
const dialogVisible = ref(false);
const title = ref("");
@@ -79,8 +79,9 @@
queryParams:{
pageNum: 1,
pageSize: 5,
- warehouseId: null,
- basicId: null,
+ // warehouseId: null,
+ // basicId: null,
+ entryId: null,
code: ''
},
chooseList: []
@@ -89,8 +90,9 @@
const originalList = ref([])
const openDialog = async (type,value) => {
- state.queryParams.warehouseId =value.warehouseId
- state.queryParams.basicId =value.basicId
+ // state.queryParams.warehouseId =value.warehouseId
+ // state.queryParams.basicId =value.basicId
+ state.queryParams.entryId = value.id
title.value = type;
await getList()
@@ -120,8 +122,7 @@
state.queryParams = {
pageNum: 1,
pageSize: 5,
- warehouseId: null,
- basicId: null,
+ entryId: null,
code: ''
}
state.total = 0
@@ -129,7 +130,7 @@
}
const getList = async () => {
if(title.value == 'pro'){
- const res = await getProDetail(state.queryParams)
+ const res = await getWhProDetail(state.queryParams)
if(res.code == 200){
state.dataList = res.data.list.map(item => {
return{
@@ -144,7 +145,7 @@
ElMessage.warning(res.message)
}
}else {
- const res = await getRawDetail(state.queryParams)
+ const res = await getWhRawDetail(state.queryParams)
if(res.code == 200){
state.dataList = res.data.list.map(item => {
return{
@@ -178,6 +179,7 @@
}
const printContent=document.createElement('div')
printContent.innerHTML=qrCodes
+
//创建一个新的隐藏的iframe元素
const printFrame =document.createElement('iframe')
printFrame.style.display='none'
@@ -202,6 +204,7 @@
`)
printDocument.close()
//在打印窗口中调用打印功能
+ console.log('printFrame.contentWindow.document.body.style',printFrame.contentWindow.document.body.style)
printFrame.contentWindow.print()
//移除隐藏的iframe元素
document.body.removeChild(printFrame)
diff --git a/src/views/hazardousChemicals/warehouseManage/components/proDetail.vue b/src/views/hazardousChemicals/warehouseManage/components/proDetail.vue
index ebc966e..3ac5639 100644
--- a/src/views/hazardousChemicals/warehouseManage/components/proDetail.vue
+++ b/src/views/hazardousChemicals/warehouseManage/components/proDetail.vue
@@ -66,6 +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" @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>
@@ -78,13 +80,24 @@
@pagination="getList"
/>
<viewQRcode ref="dialogRef" @getList="getList"></viewQRcode>
+ <el-dialog
+ v-model="dialogVisible"
+ width="650px"
+ :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 {nextTick, onMounted, reactive, ref} from "vue";
+import flowDeail from '../../../components/flowDetail.vue'
import {useRoute, useRouter} from "vue-router";
import {
+ disCardPro,
getWhProDetail
} from "@/api/hazardousChemicals/productRecord";
import viewQRcode from '@/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue'
@@ -169,6 +182,35 @@
const handleClose = () => {
dialogVisible.value = false
}
+const viewFlow = (val) => {
+ dialogVisible.value = true
+ nextTick(() => {
+
+ flowRef.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)
+ }
+ })
+
+
+}
</script>
<style scoped lang="scss">
diff --git a/src/views/hazardousChemicals/warehouseManage/components/rawDetail.vue b/src/views/hazardousChemicals/warehouseManage/components/rawDetail.vue
index 251aea3..1ce954a 100644
--- a/src/views/hazardousChemicals/warehouseManage/components/rawDetail.vue
+++ b/src/views/hazardousChemicals/warehouseManage/components/rawDetail.vue
@@ -66,6 +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" @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>
@@ -78,12 +80,22 @@
@pagination="getList"
/>
<viewQRcode ref="dialogRef" @getList="getList"></viewQRcode>
+ <el-dialog
+ v-model="dialogVisible"
+ width="650px"
+ :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 {nextTick, onMounted, reactive, ref} from "vue";
import {useRoute, useRouter} from "vue-router";
+import flowDeail from '../../../components/flowDetail.vue'
import {ElMessage, ElMessageBox} from "element-plus";
import {disCardRaw, getRawDetail, getWhRawDetail} from "@/api/hazardousChemicals/rawRecord";
import viewQRcode from '@/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue'
@@ -175,6 +187,33 @@
const handleClose = () => {
dialogVisible.value = false
}
+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)
+ })
+}
</script>
diff --git a/src/views/hazardousChemicals/warehouseManage/index.vue b/src/views/hazardousChemicals/warehouseManage/index.vue
index a6514b9..6f23b15 100644
--- a/src/views/hazardousChemicals/warehouseManage/index.vue
+++ b/src/views/hazardousChemicals/warehouseManage/index.vue
@@ -30,7 +30,12 @@
})
onMounted(()=>{
- showFinishPro.value = true;
+ if(Cookies.get('configInfo')){
+ const config = JSON.parse(Cookies.get('configInfo'))
+ showFinishPro.value = config.useProd === 1;
+ }else {
+ showFinishPro.value = true
+ }
if(Cookies.get('typeWh')){
data.activeName = showFinishPro.value && Cookies.get('typeWh') ==='pro' ? 'finishPro' : 'rawMaterial'
}else{
diff --git a/src/views/homePage.vue b/src/views/homePage.vue
index e8e5894..c4d5b42 100644
--- a/src/views/homePage.vue
+++ b/src/views/homePage.vue
@@ -3,13 +3,15 @@
<div class="title">
<div class="logo">
<img class="pics2" :src="logoPng">
- <span style="font-size: 40px;color: black">沙湾市安全培训</span>
+ <span style="font-size: 40px;color: black"></span>
<div style="width: 2px;height: 40px;background-color: #1C68A7;margin-top: 5px;margin-left: 15px;margin-right: 15px"></div>
<span style="font-size: 28px;color: white">危化品全生命周期管理系统</span>
</div>
<div class="content">
<div class="imgBox">
- <div class="imG"></div>
+ <div class="imG">
+ <img style="width: auto;height: 420px" :src="back">
+ </div>
</div>
<div class="formBox">
<div class="loginTitle">账号登录</div>
@@ -159,7 +161,8 @@
import menu from "@/layout/components/Sidebar/menu";
import dataPng from "@/assets/images/login-data.png"
import searchPng from "@/assets/images/login-search.png"
-import logoPng from "@/assets/logo/logo3.png"
+import logoPng from "@/assets/logo/logo1.png"
+import back from "@/assets/images/logo22.png"
const userStore = useUserStore()
const route = useRoute();
@@ -258,11 +261,25 @@
// Cookies.set('routers',JSON.stringify(sidebarRouters.value))
// }
const userInfo = JSON.parse(Cookies.get('userInfo'))
+
if(userInfo.userType === 0) {
sidebarRouters.value = menu.adminMenu
Cookies.set('routers',JSON.stringify(sidebarRouters.value))
- }else {
- sidebarRouters.value = menu.companyMenu
+ }else if(userInfo.userType === 1){
+ const config = JSON.parse(Cookies.get('configInfo'))
+ if(config.useProd === 0){
+ sidebarRouters.value = menu.companyMenu.filter(item => item.path != '/finishedBasicInfo')
+ }else {
+ sidebarRouters.value = menu.companyMenu
+ }
+ Cookies.set('routers',JSON.stringify(sidebarRouters.value))
+ }else if(userInfo.userType === 2){
+ const config = JSON.parse(Cookies.get('configInfo'))
+ if(config.useProd === 0){
+ sidebarRouters.value = menu.commonMenu.filter(item => item.path != '/finishedBasicInfo')
+ }else {
+ sidebarRouters.value = menu.commonMenu
+ }
Cookies.set('routers',JSON.stringify(sidebarRouters.value))
}
let path = ""
@@ -355,12 +372,12 @@
margin: 25px 0;
}
.imG{
- width: 500px;
- height: 500px;
- background-image: url(../assets/images/ad.png) ;
+ //width: 500px;
+ //height: 500px;
+ //background-image: url(../assets/images/logo11.jpg) ;
background-repeat: no-repeat;
position: absolute;
- left: 30px;
+ left: -30px;
top: 30px;
}
.formBox{
--
Gitblit v1.9.2