From 31ab2edfa500364818d2cc2c30acc1f4ae5b8dac Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期二, 20 八月 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