YangJian0701 1 year ago
parent
commit
a437ec27b0
100 changed files with 1013 additions and 338 deletions
  1. 11 1
      src/api/module/storageFrom.ts
  2. 1 1
      src/api/module/storagePut.ts
  3. 97 0
      src/components/echart/echart-Allbar-row.vue
  4. 20 4
      src/plugins/rulesData.ts
  5. 7 0
      src/plugins/settime.ts
  6. 67 40
      src/views/home/index.vue
  7. 2 2
      src/views/stockcontrol/storageFrom/Editinventory.vue
  8. 327 0
      src/views/stockcontrol/storageFrom/Labour.vue
  9. 4 2
      src/views/stockcontrol/storageFrom/index.vue
  10. 123 0
      src/views/stockcontrol/storageFrom/inputSearch.vue
  11. 182 272
      src/views/stockcontrol/storageFrom/scanCode.vue
  12. 2 2
      src/views/stockcontrol/storagePut/Editinventory.vue
  13. 28 7
      src/views/stockcontrol/storagePut/inputSearch.vue
  14. 31 7
      src/views/stockcontrol/storagePut/scanCode.vue
  15. BIN
      出入库管理系统.rar
  16. 1 0
      出入库管理系统/css/1.dfb159e9.css
  17. 1 0
      出入库管理系统/css/134.41fb80da.css
  18. 1 0
      出入库管理系统/css/173.d4407f76.css
  19. 1 0
      出入库管理系统/css/253.b6e1abc9.css
  20. 0 0
      出入库管理系统/css/342.4f034e44.css
  21. 1 0
      出入库管理系统/css/401.3289778d.css
  22. 0 0
      出入库管理系统/css/429.4f034e44.css
  23. 1 0
      出入库管理系统/css/521.42ad3fcf.css
  24. 0 0
      出入库管理系统/css/538.4f034e44.css
  25. 0 0
      出入库管理系统/css/633.8b596f1b.css
  26. 1 0
      出入库管理系统/css/670.b00fd934.css
  27. 1 0
      出入库管理系统/css/781.4b5d2e9a.css
  28. 1 0
      出入库管理系统/css/870.9502257d.css
  29. 0 0
      出入库管理系统/css/902.cfdbba09.css
  30. 1 0
      出入库管理系统/css/978.778e9831.css
  31. 0 0
      出入库管理系统/css/app.a480b5c8.css
  32. 0 0
      出入库管理系统/css/chunk-vendors.c5343724.css
  33. BIN
      出入库管理系统/favicon.ico
  34. BIN
      出入库管理系统/fonts/1639093199705607.23cb1cbf.ttf
  35. BIN
      出入库管理系统/fonts/1640748942940454.8d571a5b.ttf
  36. BIN
      出入库管理系统/fonts/1645487823772202.188bbc5c.otf
  37. BIN
      出入库管理系统/fonts/Logo.10a8e37a.ttf
  38. BIN
      出入库管理系统/fonts/UnidreamLED.df04847a.ttf
  39. BIN
      出入库管理系统/fonts/douyuzhuiguangti.23cb1cbf.ttf
  40. BIN
      出入库管理系统/fonts/iconfont.b67f6d6f.ttf
  41. BIN
      出入库管理系统/img/1700227167756.2203a3ea.jpg
  42. BIN
      出入库管理系统/img/1700227576514.0f0dfe16.jpg
  43. BIN
      出入库管理系统/img/1700228167058.6445352d.jpg
  44. BIN
      出入库管理系统/img/1700228181332.9528a5c4.jpg
  45. BIN
      出入库管理系统/img/1700228207945.f1b33668.jpg
  46. BIN
      出入库管理系统/img/1700450751581.b7423ad9.png
  47. BIN
      出入库管理系统/img/404.52ac3ffa.png
  48. 1 0
      出入库管理系统/img/BarCodeQR.69f4fb5e.svg
  49. BIN
      出入库管理系统/img/icons/android-chrome-192x192.png
  50. BIN
      出入库管理系统/img/icons/android-chrome-512x512.png
  51. BIN
      出入库管理系统/img/icons/android-chrome-maskable-192x192.png
  52. BIN
      出入库管理系统/img/icons/android-chrome-maskable-512x512.png
  53. BIN
      出入库管理系统/img/icons/apple-touch-icon-120x120.png
  54. BIN
      出入库管理系统/img/icons/apple-touch-icon-152x152.png
  55. BIN
      出入库管理系统/img/icons/apple-touch-icon-180x180.png
  56. BIN
      出入库管理系统/img/icons/apple-touch-icon-60x60.png
  57. BIN
      出入库管理系统/img/icons/apple-touch-icon-76x76.png
  58. BIN
      出入库管理系统/img/icons/apple-touch-icon.png
  59. BIN
      出入库管理系统/img/icons/favicon-16x16.png
  60. BIN
      出入库管理系统/img/icons/favicon-32x32.png
  61. BIN
      出入库管理系统/img/icons/msapplication-icon-144x144.png
  62. BIN
      出入库管理系统/img/icons/mstile-150x150.png
  63. 3 0
      出入库管理系统/img/icons/safari-pinned-tab.svg
  64. 86 0
      出入库管理系统/index.html
  65. 0 0
      出入库管理系统/js/1.3a6e7c12.js
  66. 0 0
      出入库管理系统/js/1.3a6e7c12.js.map
  67. 0 0
      出入库管理系统/js/134.28246f67.js
  68. 0 0
      出入库管理系统/js/134.28246f67.js.map
  69. 0 0
      出入库管理系统/js/173.5a526efa.js
  70. 0 0
      出入库管理系统/js/173.5a526efa.js.map
  71. 0 0
      出入库管理系统/js/253.6287b710.js
  72. 0 0
      出入库管理系统/js/253.6287b710.js.map
  73. 0 0
      出入库管理系统/js/318.92d756ee.js
  74. 0 0
      出入库管理系统/js/318.92d756ee.js.map
  75. 2 0
      出入库管理系统/js/342.a30662e9.js
  76. 1 0
      出入库管理系统/js/342.a30662e9.js.map
  77. 0 0
      出入库管理系统/js/401.152932dc.js
  78. 0 0
      出入库管理系统/js/401.152932dc.js.map
  79. 2 0
      出入库管理系统/js/429.1525ad26.js
  80. 1 0
      出入库管理系统/js/429.1525ad26.js.map
  81. 2 0
      出入库管理系统/js/521.87d3381f.js
  82. 0 0
      出入库管理系统/js/521.87d3381f.js.map
  83. 2 0
      出入库管理系统/js/538.0ccb0686.js
  84. 1 0
      出入库管理系统/js/538.0ccb0686.js.map
  85. 0 0
      出入库管理系统/js/633.9006f139.js
  86. 0 0
      出入库管理系统/js/633.9006f139.js.map
  87. 0 0
      出入库管理系统/js/670.29c2491b.js
  88. 0 0
      出入库管理系统/js/670.29c2491b.js.map
  89. 0 0
      出入库管理系统/js/781.9b5f0f1f.js
  90. 0 0
      出入库管理系统/js/781.9b5f0f1f.js.map
  91. 0 0
      出入库管理系统/js/870.fdbbaebc.js
  92. 0 0
      出入库管理系统/js/870.fdbbaebc.js.map
  93. 0 0
      出入库管理系统/js/902.035bafaf.js
  94. 0 0
      出入库管理系统/js/902.035bafaf.js.map
  95. 0 0
      出入库管理系统/js/978.31702af1.js
  96. 0 0
      出入库管理系统/js/978.31702af1.js.map
  97. 0 0
      出入库管理系统/js/app.696245ae.js
  98. 0 0
      出入库管理系统/js/app.696245ae.js.map
  99. 0 0
      出入库管理系统/js/chunk-vendors.4c222c47.js
  100. 0 0
      出入库管理系统/js/chunk-vendors.4c222c47.js.map

+ 11 - 1
src/api/module/storageFrom.ts

@@ -30,4 +30,14 @@ export const stockoutdel = (params: any) => $http.post('/stock-template/out/dele
 
 
 
-export const medicListStockOut = (params: any) => $http.post('/medicine-template/list-for-stock-out', params)
+export const medicListStockOut = (params: any) => $http.post('/medicine-template/list-for-stock-out', params)
+
+
+
+/**
+ * 获取马上放心
+ * @param params 
+ * @returns 
+ */
+
+export const stockCodeOut = (params: any) => $http.post('/stock-template/scan-code-out', params)

+ 1 - 1
src/api/module/storagePut.ts

@@ -48,7 +48,7 @@ export const medicListScanCode = (params: any) => $http.post('/medicine-template
  * @param params 
  * @returns 
  */
-export const medicMsfx = (params: any) => $http.post('/medicine/msfx-query', params)
+export const medicMsfx = (params: any) => $http.get('/medicine/msfx-query', params)
 
 export const stockCodein = (params: any) => $http.post('/stock-template/scan-code-in', params)
 

+ 97 - 0
src/components/echart/echart-Allbar-row.vue

@@ -0,0 +1,97 @@
+<!-- 柱图 -->
+<template>
+    <div style="height:100%;min-height: 300px;" :id="props.id" class="myChart"></div>
+</template>
+<script setup lang="ts">
+import { onMounted, inject, watch, reactive } from "vue";
+import { findBarRowFun } from "@/plugins/findData";
+// 接受父组件参数,配置默认值
+const props = defineProps({
+    id: {
+        type: String,
+        default: () => '',
+    },
+    lineData: {
+        type: Object,
+        default: () => { },
+    },
+});
+
+let echart: any = null
+let myChart: any = null
+
+let echartData: any = reactive({})
+
+watch(() => props.lineData, async () => {
+    Object.assign(echartData,findBarRowFun(props.lineData))
+    myChart.clear();
+    myChart.setOption(initEcharts());
+})
+onMounted(() => {
+    echart = inject('echart')
+    myChart = echart.init(document.getElementById(props.id));
+    setEchartFun();
+})
+
+//函数
+const setEchartFun = async () => {
+    myChart.setOption(initEcharts());
+    window.onresize = function () {
+        myChart.resize();
+    };
+}
+const initEcharts = () => {
+    // 绘制图表
+    return {
+        title: {},
+        tooltip: {
+            // trigger: 'axis',
+            // axisPointer: {
+            //     type: 'shadow'
+            // }
+        },
+        legend: {},
+        grid: {
+            top:'0%',
+            left: '0%',
+            right: '4%',
+            bottom: '3%',
+            containLabel: true
+        },
+        xAxis: {
+            type: 'value',
+            boundaryGap: [0, 0.01]
+        },
+        yAxis: {
+            type: 'category',
+            data: echartData.xAxisArr
+        },
+        series: [
+            {
+                type: 'bar',
+                data:  echartData.dataServe,
+                barMaxWidth:'20%',//宽度
+                itemStyle: { //面积图颜色设置
+                    color: {
+                        type: 'linear',
+                        x: 0,
+                        y: 0,
+                        x2: 0,
+                        y2: 1,
+                        colorStops: [
+                        { offset: 0, color: 'rgb(51,205,184)' },
+                                    { offset: 0.5, color: 'rgb(51,205,184)' },
+                                    { offset: 1, color: 'rgb(51,205,184)' }
+                        ],
+                        globalCoord: false // 缺省为 false
+                    },
+                    borderRadius: [0,20,20,0] //圓角
+                },
+            },
+        ]
+    }
+}
+defineExpose({
+    myChart,setEchartFun
+})
+</script>

+ 20 - 4
src/plugins/rulesData.ts

@@ -21,15 +21,21 @@ export let columnsTable = [
     { prop: 'quantity', label: '数量', width: 0 },
     { prop: 'unit_price', label: '购进单价', width: 0 },
     { prop: 'operator', label: '经办人', width: 0 },
-    // { prop: 'forwarding_unit', label: '发货单位', width: 0 },
-    { prop: 'forwardingUnit', label: '发货单位', width: 0 },
-
-    
+    { prop: 'forwarding_unit', label: '发货单位', width: 0 },
     { prop: 'date', label: '入库日期', width: 0 },
     { prop: 'operation', label: '操作', fixed: 'right',"min-width":200}
 ]
 
 
+//入库
+export let scanCodeTable = [
+    { prop: 'quantity', label: '数量', width: 0 },
+    { prop: 'unitPrice', label: '购进单价', width: 0 },
+    { prop: 'operator', label: '经办人', width: 0 },
+    { prop: 'forwardingUnit', label: '发货单位', width: 0 },
+    { prop: 'date', label: '入库日期', width: 0 },
+    { prop: 'operation', label: '操作', fixed: 'right',"min-width":200}
+]
 
 //出库
 export let columnsTableOut = [
@@ -39,4 +45,14 @@ export let columnsTableOut = [
     { label: '收货单位', prop: 'receiving_unit', width: 0 },
     { label: '出库日期', prop: 'date', width: 0 },
     { prop: 'operation', label: '操作', fixed: 'right',"min-width":200}
+]
+
+//出库
+export let scanCodeTableOut = [
+    { label: '数量', prop: 'quantity', width: 0 },
+    { label: '销售单价', prop: 'unitPrice', width: 0 },
+    { label: '经办人', prop: 'operator', width: 0 },
+    { label: '收货单位', prop: 'receivingUnit', width: 0 },
+    { label: '出库日期', prop: 'date', width: 0 },
+    { prop: 'operation', label: '操作', fixed: 'right',"min-width":200}
 ]

+ 7 - 0
src/plugins/settime.ts

@@ -0,0 +1,7 @@
+export function timesFn(){
+    const time = new Date()
+    var year = time.getFullYear();
+    var month = (time.getMonth() + 1).toString().padStart(2,'0'); // 注意月份是从0开始计数的,所以要加1
+    var day = (time.getDate()).toString().padStart(2,'0');
+    return year + '-' + month + '-'+day
+}

+ 67 - 40
src/views/home/index.vue

@@ -3,10 +3,12 @@
   <div class="home">
     <div class="home-main">
       <bgPure #bg>
-        <statistics :imgUrl="require('@/assets/img/1700227576514.jpg')" titles="库存总额" :subhea="String(data.echartsData.inventoryAmount)"></statistics>
+        <statistics :imgUrl="require('@/assets/img/1700227576514.jpg')" titles="库存总额"
+          :subhea="String(data.echartsData.inventoryAmount)"></statistics>
       </bgPure>
       <bgPure #bg>
-        <statistics :imgUrl="require('@/assets/img/1700228167058.jpg')" titles="库存总量" :subhea="String(data.echartsData.inventoryQuantity)"></statistics>
+        <statistics :imgUrl="require('@/assets/img/1700228167058.jpg')" titles="库存总量"
+          :subhea="String(data.echartsData.inventoryQuantity)"></statistics>
       </bgPure>
     </div>
     <div class="home-echarts">
@@ -14,8 +16,10 @@
         <template #card-tit>
           库存统计-图表
         </template>
-        <template #card-content v-show="data.lineData.length==0">
-          <!-- <el-empty v-show="data.lineData.length==0" description="Tip,暂时没有可展示曲线数据哟!" /> -->
+        <template #card-subhead>
+          <div style="text-decoration: underline;cursor: pointer;" @click="showDialogVisible">更多数据</div>
+        </template>
+        <template #card-content v-show="data.lineData.length == 0">
           <echartBarRow id="bar1" :lineData="data.lineData"></echartBarRow>
         </template>
       </cards>
@@ -53,24 +57,36 @@
       </template>
       <template #card-subhead>
         <el-select v-model.number="data.initParam.productId" filterable remote reserve-keyword placeholder="血液制品名称"
-            :remote-method="remoteMethod1" :loading="loading" clearable style="width: 200px;"
-            @clear="data.initParam.productId = null" @click="click1" @change="changeFun">
-            <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+          :remote-method="remoteMethod1" :loading="loading" clearable style="width: 200px;"
+          @clear="data.initParam.productId = null" @click="click1" @change="changeFun">
+          <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
         </el-select>
       </template>
       <template #card-content>
         <tables ref="TableRef" :requestApi="homeList" :columns="columns" :initParam="data.initParam"></tables>
       </template>
     </cards>
-
+    <el-dialog v-model="dialogVisible" title="Tips" append-to-body>
+      <echartAllBarRow id="bar3" ref="echartAllBarRowRef" :lineData="data.lineData"></echartAllBarRow>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="dialogVisible = false">Cancel</el-button>
+          <el-button type="primary" @click="dialogVisible = false">
+            Confirm
+          </el-button>
+        </span>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
 <script setup lang="ts">
-import { homeList,productList,stockHomeList } from "@/api";
-import { provide, onMounted, reactive,ref } from "vue";
+import { homeList, productList, stockHomeList } from "@/api";
+import { provide, onMounted, reactive, ref, nextTick } from "vue";
 import echartbar from '@/components/echart/echart-bar.vue'
 import echartBarRow from '@/components/echart/echart-bar-row.vue'
+import echartAllBarRow from '@/components/echart/echart-Allbar-row.vue'
+
 import bgPure from '@/components/bgPure.vue'
 import cards from '@/components/card.vue'
 import statistics from '@/components/statistics.vue'
@@ -80,34 +96,45 @@ import * as echarts from 'echarts'
 provide('echart', echarts)
 const store = useStore()
 const TableRef = ref()
+const dialogVisible = ref()
+const echartAllBarRowRef = ref()
+
+//函数
+const showDialogVisible = async ()=>{
+  dialogVisible.value = true
+  nextTick(()=>{
+    console.log('show',echartAllBarRowRef.value.setEchartFun())
+    echartAllBarRowRef.value.setEchartFun()
 
+  })
+}
 // 渲染表格
 const columns: any = [
   { type: 'index', label: '编号', width: 80, },
-  { prop: 'product_name', label: '血液制品名称'},
-  { prop: 'spec_name', label: '规格(剂/支或粒)'},
+  { prop: 'product_name', label: '血液制品名称' },
+  { prop: 'spec_name', label: '规格(剂/支或粒)' },
   { prop: 'balance', label: '数量', },
-  { prop: 'unit_name', label: '单位'},
+  { prop: 'unit_name', label: '单位' },
 ]
 interface ListItem {
-    value: string
-    label: string
+  value: string
+  label: string
 }
 const list1 = ref<ListItem[]>([])//血液制品名称
 const options1 = ref<ListItem[]>([])
 const loading = ref(false)
 const remoteMethod1 = async (query: string) => {
-    if (query) {
-        loading.value = true
-        setTimeout(() => {
-            loading.value = false
-            options1.value = list1.value.filter((item: any) => {
-                return item.label.toLowerCase().includes(query.toLowerCase())
-            })
-        }, 200)
-    } else {
-        options1.value = []
-    }
+  if (query) {
+    loading.value = true
+    setTimeout(() => {
+      loading.value = false
+      options1.value = list1.value.filter((item: any) => {
+        return item.label.toLowerCase().includes(query.toLowerCase())
+      })
+    }, 200)
+  } else {
+    options1.value = []
+  }
 }
 const click1 = async () => { options1.value = list1.value }
 //请求参数
@@ -116,12 +143,12 @@ const data: any = reactive({
     specId: 0,
     productId: null
   },
-  lineData:[],
-  echartsData:{}
+  lineData: [],
+  echartsData: {}
 })
 //函数
-const changeFun = async ()=>{
-  if(data.initParam.productId=="") data.initParam.productId = null
+const changeFun = async () => {
+  if (data.initParam.productId == "") data.initParam.productId = null
   TableRef.value?.getTableList()
   homeListApi()
 }
@@ -136,32 +163,32 @@ onMounted(() => {
 })
 
 //函数
-const stockHomeListApi = async ()=>{
-  const reslut:any = await stockHomeList({})
-  if(reslut.code==200 && reslut.msg=="查询成功"){
+const stockHomeListApi = async () => {
+  const reslut: any = await stockHomeList({})
+  if (reslut.code == 200 && reslut.msg == "查询成功") {
     data.echartsData = reslut.data?.list || {}
   }
 }
 
 //函数
-const homeListApi = async ()=>{
-  const result:any = await homeList({
+const homeListApi = async () => {
+  const result: any = await homeList({
     "page": 1,
     "pageSize": 9999,
     "specId": 0,
     "productId": data.initParam.productId
   })
-  if(result.code==200 && result.msg=="查询成功"){
+  if (result.code == 200 && result.msg == "查询成功") {
     data.lineData = result.data?.list || []
   }
-  console.log('result',result)
+  console.log('result', result)
 }
 homeListApi()
 //函数
 const findMap = (arr: any, obj: any) => {
-    return arr.map((item: any) => {
-        return { value: obj == 'obj' ? item.id : item, label: obj == 'obj' ? item.name : item }
-    })
+  return arr.map((item: any) => {
+    return { value: obj == 'obj' ? item.id : item, label: obj == 'obj' ? item.name : item }
+  })
 }
 </script>
 <style lang="scss">

+ 2 - 2
src/views/stockcontrol/storageFrom/Editinventory.vue

@@ -227,10 +227,10 @@ const medicListStockFun = async ()=>{
  * @param row 
  */
 const delClick = (row:any) => {
-    ElMessageBox.confirm('删除一条信息,是否继续?','删除',{
+    ElMessageBox.confirm('删除一条信息,将导致数量变化,是否继续?','删除',{
       confirmButtonText: '确认删除',
       cancelButtonText: 'Cancel',
-      type: 'warning',
+      type: 'error',
       center: true,
     }).then(async() => {
         const reslut:any = await stockoutdel({id:row.id})

+ 327 - 0
src/views/stockcontrol/storageFrom/Labour.vue

@@ -0,0 +1,327 @@
+<!-- 扫码 -->
+<template>
+    <div class="">
+        <el-button el-button type="primary" icon="Pointer" @click="showDia">手动出库</el-button>
+        <el-dialog v-model="dialogFormVisible" title="手动出库" :append-to-body="true" :before-close="closeFun" draggable :close-on-click-modal="false" :close-on-press-escape="false" width="60%">
+            <el-form ref="ruleFormRef" :rules="rules" :model="initParam" :inline="true">
+                <el-divider content-position="center">药品信息</el-divider>
+                <el-form-item :label="item.name" :label-width="formLabelWidth" v-for="(item,index) in data.showDiaData" :key="index" :prop="'medicineInfo.'+item.field_name">
+                    <el-select v-model="initParam.medicineInfo[item.field_name]" :placeholder="'请选择'+item.name" class="inputWidth" v-if="[1,2,3,4,5].includes(item.type)">
+                        <el-option :label="itemIt.name" :value="itemIt.id" v-for="itemIt,i in item.list" :key="i"/>
+                    </el-select>
+                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==6"/>
+                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==7"/>
+                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==8"/>
+                    <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="date" value-format="YYYY-MM-DD" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==9"/>
+                    <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==10"/>
+                </el-form-item>
+                <el-divider content-position="center">出库信息</el-divider>
+                <el-form-item class="el-form-item-main" label="数量" :label-width="formLabelWidth" prop="quantity">
+                    <el-input v-model.number="initParam.quantity" autocomplete="off" class="inputWidth" />
+                </el-form-item>
+                <el-form-item class="el-form-item-main" label="销售单价" :label-width="formLabelWidth">
+                    <el-input v-model="initParam.unitPrice" autocomplete="off" class="inputWidth"/>
+                </el-form-item>
+                <el-form-item class="el-form-item-main" label="出库日期" :label-width="formLabelWidth" prop="date">
+                    <el-date-picker v-model="initParam.date" type="date" placeholder="出库日期" value-format="YYYY-MM-DD" clearable style="width: 200px;" />
+                </el-form-item>
+                <el-form-item class="el-form-item-main" label="收货单位" :label-width="formLabelWidth">
+                    <el-autocomplete v-model="initParam.forwardingUnit" :fetch-suggestions="querySearch1" clearable class="inputWidth"
+                        placeholder="收货单位" />
+                </el-form-item>
+                <el-form-item label="经办人" :label-width="formLabelWidth" prop="operator">
+                    <!-- <el-select v-model="initParam.operator" placeholder="请选择经办人" class="inputWidth">
+                        <el-option :label="it" :value="it" v-for="(it,j) in data.itemOpen" :key="j+Math.random()" />
+                    </el-select> -->
+                    <el-autocomplete v-model="initParam.operator" :fetch-suggestions="querySearch" clearable class="inputWidth"
+                        placeholder="经办人" />
+                </el-form-item>
+            </el-form>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button type="primary" @click="submitForm(ruleFormRef)">加入暂存</el-button>
+                    <el-button @click="showinnerVisible">查看暂存</el-button>
+                    <el-button type="danger" @click="resetForm(ruleFormRef)">重置数据</el-button>
+                </span>
+            </template>
+            <el-dialog v-model="innerVisible" title="出库数据" width="95%" append-to-body draggable :close-on-click-modal="false" :close-on-press-escape="false">
+                <el-table :data="data.tableData" style="width: 100%" border max-height="450"   :header-cell-style="{'background-color':'#ccc','color': 'white'}">
+                    <el-table-column :label="item.label" v-for="item,i in data.columns" :key="i" min-width="110" show-overflow-tooltip>
+                        <template #default="scope"><!--scope.row.medicineInfo[item.prop] -->
+                            {{ findFun(scope.row.medicineInfo[item.prop],item.list)}}
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="quantity" label="数量" min-width="110" show-overflow-tooltip/>
+                    <el-table-column prop="unitPrice" label="购进单价" min-width="110" show-overflow-tooltip/>
+                    <el-table-column prop="forwardingUnit" label="收货单位"  min-width="110" show-overflow-tooltip/>
+                    <el-table-column prop="date" label="出库日期" min-width="110" show-overflow-tooltip/>
+                    <el-table-column prop="operator" label="经办人" min-width="110" show-overflow-tooltip/>
+
+                    <el-table-column fixed="right" label="操作" min-width="110">
+                        <template #default="scope">
+                            <el-button type="primary" :icon="Edit" @click="handleClick(scope.row,scope.$index)" circle />
+                            <el-button type="danger" :icon="Delete" @click="delClick(scope.$index)" circle />
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <template #footer>
+                    <span class="dialog-footer">
+                        <el-button @click="innerVisible = false">关闭</el-button>
+                        <el-button type="primary" @click="subStock">立即出库</el-button>
+                    </span>
+                </template>
+            </el-dialog>
+        </el-dialog>
+    </div>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref } from 'vue'
+import type { FormInstance, FormRules} from 'element-plus'
+import { ElNotification} from 'element-plus'
+import { syrulesData,columnsTable } from "@/plugins/rulesData";
+const dialogFormVisible = ref(false)
+const ruleFormRef = ref<FormInstance>()
+
+let rules:any = reactive({})
+
+import { 
+    medicListStockOut,
+    stockunit,//发货单位
+    operatorList,//经办人
+    stockTemplateIn,//单个出库
+    stockTemplateBatchOut,//批量出库
+} from "@/api";
+const innerVisible = ref(false)
+import { ElMessage, ElMessageBox } from 'element-plus'
+import {Delete,Edit,} from '@element-plus/icons-vue'
+const formLabelWidth = '110px'
+
+let initParam:any = reactive({
+    "date": "",
+    "forwardingUnit": "",
+    "medicineInfo": {},
+    "operator":'',
+    "quantity": null,
+    "unitPrice":null
+})
+let data:any = reactive({
+    tableData:[],
+    showDiaData:[],
+    itemPir:[],
+    itemOpen:[],
+    rules1:{},
+    columns:[],// 渲染表格
+    selectType:[],//表格的下拉对应
+    editStrot:false,
+    editIndex:null
+}) 
+const emit:any = defineEmits(['scanCode'])
+//立即出库
+const subStock = async ()=>{
+    const reslut:any = await stockTemplateBatchOut({"stockOutList": data.tableData})
+    console.log('返回',reslut)
+    if(reslut.code==200 && reslut.msg=='出库成功'){
+        ElMessage.success(reslut.msg)
+        dialogFormVisible.value = false
+        innerVisible.value = false
+        emit('scanCode', '')
+        data.tableData = []
+    }
+}
+
+
+//函数
+const findFun =  (data:any,list:any)=>{
+    if(list){
+        const b = list.find((item:any) => item.id==data)
+        if(b) return b.name
+        else return ''
+    }else{
+        return data
+    }
+}
+const resetForm = (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  formEl.resetFields()
+}
+//加入暂存区
+const submitForm = async (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+        ElNotification({
+            title: '暂存成功',
+            message: 'ok,加入暂存成功,右下角按钮查看/提交暂存',
+            type: 'success',
+        })
+        console.log('提交',data.editStrot)
+        if(data.editStrot){//编辑状态
+            let {date,forwardingUnit,operator,quantity,unitPrice,medicineInfo} = initParam
+            data.tableData.splice(data.editIndex,1,{date,forwardingUnit,operator,quantity,unitPrice:unitPrice,medicineInfo:{...medicineInfo}})
+            console.log('编辑状态',data.tableData)
+        }else{//正常添加
+            let {date,forwardingUnit,operator,quantity,unitPrice,medicineInfo} = initParam
+            data.tableData.push({date,forwardingUnit,operator,quantity,unitPrice:unitPrice,medicineInfo:{...medicineInfo}})
+            console.log('正常添加',data.tableData)
+        }
+    } else {
+        ElMessage.error('请完善必填项')
+    }
+  })
+}
+
+//函数
+const closeFun = async () => {
+    if(data.tableData.length==0){
+        dialogFormVisible.value = false
+        data.tableData = []
+    }else{
+        ElMessageBox.confirm('请检查录入数据是否已经提交,该操作将放弃出库信息,是否放弃?', '提示', {
+            confirmButtonText: '立即出库',
+            cancelButtonText: '放弃数据',
+            type: 'warning',
+            draggable: true,
+            center: true,
+        }).then(() => {
+            innerVisible.value = true
+        }).catch(() => {
+            dialogFormVisible.value = false
+            ElMessage.success('已放弃出库数据')
+        })
+    }
+}
+interface RestaurantItem {
+  value: string
+  link: string
+}
+const restaurants = ref<RestaurantItem[]>([])
+const querySearch = (queryString: string, cb: any) => {
+  const results = queryString
+    ? restaurants.value.filter(createFilter(queryString))
+    : restaurants.value
+  cb(results)
+}
+const createFilter = (queryString: string) => {
+  return (restaurant: RestaurantItem) => {
+    return (
+      restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0
+    )
+  }
+}
+
+const restaurants1 = ref<RestaurantItem[]>([])
+const querySearch1 = (queryString: string, cb: any) => {
+  const results = queryString
+    ? restaurants1.value.filter(createFilter(queryString))
+    : restaurants1.value
+  cb(results)
+}
+//收发货单位
+const itemPirFun = async()=>{
+    const reslut:any = await stockunit({ type: 3 })
+    const arrMap = reslut.data?.list
+    const arr:any = []
+    arrMap.forEach((item:any)=>{
+        arr.push({ value: item, link: item})  
+    })
+    restaurants1.value = arr
+}
+//经办人Api
+const operatorListApi = async()=>{
+    const reslut:any = await operatorList({})
+    const arrMap = reslut.data?.list
+    const arr:any = []
+    arrMap.forEach((item:any)=>{
+        arr.push({ value: item, link: item})  
+    })
+    restaurants.value = arr
+}
+
+
+//函数
+const showinnerVisible = async ()=>{
+    innerVisible.value = true
+    data.editStrot = false
+    console.log(data.tableData)
+}
+
+const showDia = async ()=>{
+    data.tableData = []
+    data.showDiaData = []
+    data.itemPir = []
+    data.itemOpen = []
+    data.rules1 = []
+    data.columns = []
+    data.selectType = []
+    data.editStrot = false
+    resetFun()//复原表单
+
+    medicListStockFun()//获取出库表单
+    itemPirFun()//发货单位
+    operatorListApi()//经办人
+}
+//复原表单
+const resetFun = async ()=>{
+    initParam.date = ''
+    initParam.forwardingUnit = ''
+    initParam.medicineInfo = {}
+    initParam.operator = ''
+    initParam.quantity = null
+    initParam.unitPrice = null
+    resetForm(ruleFormRef.value)
+}
+//获取出库表单Api
+const medicListStockFun = async ()=>{
+    data.columns = []
+    const reslut:any = await medicListStockOut({})
+    if(reslut.code==200 && reslut.msg=='查询成功'){
+        data.showDiaData = reslut.data?.list
+        data.rules1 = {}
+        data.columns = []
+        data.selectType = []
+        reslut.data?.list.forEach((value:any) => { //value设置成key
+            data.selectType.push({type:value.type,list:value.list})
+            data.columns.push({ prop: value.field_name, label: value.name, list:value.list})
+            initParam.medicineInfo[value.field_name] = ''; // 这里可以根据需要设置其他值作为键的内容
+            if(['product_id','enterprise_id','spec_id','batch_number','expiry_date','approval_number'].includes(value.field_name)){
+                if(value.type==6){
+                    data.rules1['medicineInfo.'+value.field_name] =  [{required: true,message: '必填项',trigger: 'change'}]
+                }else if(value.type==7){
+                    data.rules1['medicineInfo.'+value.field_name] =  [{required: true,message: '必填项',trigger: 'change'},{ pattern: /^(?:[1-9]\d*)$/, message: '请输入正整数', trigger: "blur" },]
+                }else{
+                    data.rules1['medicineInfo.'+value.field_name] = [{required: true,message: '必填项',trigger: 'change',}]
+                }
+            }
+        });
+        Object.assign(rules,{...data.rules1,...syrulesData})
+        console.log('表格', data.selectType)
+        dialogFormVisible.value = true
+    }
+}
+
+const handleClick = (datas:any,index:any) => {
+  data.editStrot = true
+  data.editIndex = index
+  let {date,forwardingUnit,operator,quantity,unitPrice,medicineInfo} = datas
+  Object.assign(initParam,{date,forwardingUnit,operator,quantity,unitPrice,medicineInfo:{...medicineInfo}})
+  innerVisible.value = false
+}
+const delClick = (index:any) => {
+    ElMessageBox.confirm('删除一条信息,是否继续?','删除',{
+      confirmButtonText: '确认删除',
+      cancelButtonText: 'Cancel',
+      type: 'warning',
+      center: true,
+    }).then(() => {
+        data.tableData.splice(index, 1);
+      ElMessage.success('已删除')
+    })
+}
+
+</script>
+<style lang="scss">
+.inputWidth {
+    width: 200px;
+}
+</style>

+ 4 - 2
src/views/stockcontrol/storageFrom/index.vue

@@ -35,8 +35,8 @@
         </searchAdd>
         <bg istitle="基本信息">
             <template #btn>
-                <scanCode style="margin-right: 20px;" @scanCode="scanCodeFun"></scanCode>
-                <!-- <Labour></Labour> -->
+                <Labour @scanCode="scanCodeFun" style="margin-right: 20px;"></Labour>
+                <scanCode @scanCode="scanCodeFun"></scanCode>
             </template>
             <template #bg>
                 <tables ref="TableRef" :requestApi="stockOutList" :columns="columns" :initParam="initParam">
@@ -63,6 +63,8 @@ import tables from "@/components/table.vue";
 import searchAdd from "@/components/searchAdd.vue";
 import bg from '@/components/bg.vue'
 import scanCode from './scanCode.vue'
+import Labour from './Labour.vue'
+
 const TableRef = ref()
 import { columnsTableOut } from "@/plugins/rulesData";
 //函数

+ 123 - 0
src/views/stockcontrol/storageFrom/inputSearch.vue

@@ -0,0 +1,123 @@
+<template>
+    <div class="Qr">
+        <div class="Qr-img">
+            <img src="@/assets/img/BarCodeQR.svg" style="width: 80%;height: 80%;">
+        </div>
+        <div class="Qr-input">
+            <input class="Qr-input-type" ref="myInput" v-model="data.value" type="text" placeholder="请扫描追溯码" >
+            <el-icon :size="18" style="cursor: pointer;" @click="CloseFn">
+                <CircleClose />
+            </el-icon>
+        </div>
+        <button class="Qr-isButton" @click="onSubmit">确认搜索</button>
+    </div>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive } from "vue";
+import { ElMessage, ElMessageBox } from 'element-plus'
+const myInput = ref()
+const data: any = reactive({
+    value: '',
+    num:0
+})
+const emit: any = defineEmits(['inputSearchData',])
+//函数
+const inputFocus = async () => {
+    setTimeout(() => {
+        myInput.value.focus()
+    }, 1000)
+}
+//函数
+const CloseFn = async () => {
+    ClearFn()
+    setTimeout(() => {
+        myInput.value.focus()
+    }, 1000)
+}
+/**
+ * 清空
+ */
+const ClearFn = async ()=>{
+    data.value = '';
+}
+document.addEventListener('keydown',(event:any)=>{
+    // console.log('扫码枪',event)
+    data.num += 1
+    if(data.num == 1){data.value = ''}
+    if (event.code === 'Enter') { // 判断是否按下了回车键
+        data.value = event.target.value; // 获取扫描枪输入框的值    
+        onSubmit()
+    }
+})
+const onSubmit = async () => {
+    if(data.value){
+        emit('inputSearchData', data.value);data.num = 0 
+    }else{
+        ElMessage.error('点击输入框在使用扫码枪扫码')
+    }
+}
+defineExpose({
+    inputFocus, data,ClearFn
+})
+</script>
+<style lang="scss">
+/* @import url(); 引入css类 */
+.Qr {
+    display: flex;
+    margin-bottom: 20px;
+    border: 1px solid #409eff;
+    box-sizing: border-box;
+    min-width: 450px;
+    width: 50%;
+    border-radius: 6px;
+    overflow: hidden;
+
+    &-img {
+        width: 30px;
+        height: 30px;
+        margin-top: 10px;
+        margin-bottom: 10px;
+        padding: 0 20px;
+        flex-shrink: 0;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        border-right: .5px solid #409eff;
+        user-select: none;
+    }
+
+    &-input {
+        flex: 1;
+        padding: 0 20px;
+        display: flex;
+        align-items: center;
+
+        &-type {
+            outline: none;
+            border: none;
+            flex: 1;
+            font-weight: bold;
+            font-size: 18px;
+        }
+    }
+
+    &-isButton {
+        background: #409eff;
+        outline: none;
+        border: none;
+        color: #fff;
+        min-width: 100px;
+        flex-shrink: 0;
+        cursor: pointer;
+        user-select: none;
+    }
+
+    &-isButton:hover {
+        background: #a0cfff;
+    }
+
+    &-isButton:active {
+        background-color: #337ecc;
+    }
+}</style>

+ 182 - 272
src/views/stockcontrol/storageFrom/scanCode.vue

@@ -1,205 +1,211 @@
 <!-- 扫码 -->
 <template>
     <div class="">
-        <el-button el-button type="primary" icon="Camera" @click="showDia">出库</el-button>
-        <el-dialog v-model="dialogFormVisible" title="出库" :append-to-body="true" :before-close="closeFun" draggable :close-on-click-modal="false" :close-on-press-escape="false" width="60%">
-            <el-form ref="ruleFormRef" :rules="rules" :model="initParam" :inline="true">
-                <el-divider content-position="center">药品信息</el-divider>
-                <el-form-item :label="item.name" :label-width="formLabelWidth" v-for="(item,index) in data.showDiaData" :key="index" :prop="'medicineInfo.'+item.field_name">
-                    <el-select v-model="initParam.medicineInfo[item.field_name]" :placeholder="'请选择'+item.name" class="inputWidth" v-if="[1,2,3,4,5].includes(item.type)">
-                        <el-option :label="itemIt.name" :value="itemIt.id" v-for="itemIt,i in item.list" :key="i"/>
-                    </el-select>
-                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==6"/>
-                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==7"/>
-                    <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==8"/>
-                    <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="date" value-format="YYYY-MM-DD" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==9"/>
-                    <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==10"/>
-                </el-form-item>
-                <el-divider content-position="center">出库信息</el-divider>
-                <el-form-item class="el-form-item-main" label="数量" :label-width="formLabelWidth" prop="quantity">
-                    <el-input v-model.number="initParam.quantity" autocomplete="off" class="inputWidth" />
-                </el-form-item>
-                <el-form-item class="el-form-item-main" label="销售单价" :label-width="formLabelWidth">
-                    <el-input v-model="initParam.unitPrice" autocomplete="off" class="inputWidth"/>
-                </el-form-item>
-                <el-form-item class="el-form-item-main" label="出库日期" :label-width="formLabelWidth" prop="date">
-                    <el-date-picker v-model="initParam.date" type="date" placeholder="出库日期" value-format="YYYY-MM-DD" clearable style="width: 200px;" />
-                </el-form-item>
-                <el-form-item class="el-form-item-main" label="收货单位" :label-width="formLabelWidth">
-                    <el-autocomplete v-model="initParam.forwardingUnit" :fetch-suggestions="querySearch1" clearable class="inputWidth"
-                        placeholder="收货单位" />
-                </el-form-item>
-                <el-form-item label="经办人" :label-width="formLabelWidth" prop="operator">
-                    <!-- <el-select v-model="initParam.operator" placeholder="请选择经办人" class="inputWidth">
-                        <el-option :label="it" :value="it" v-for="(it,j) in data.itemOpen" :key="j+Math.random()" />
-                    </el-select> -->
-                    <el-autocomplete v-model="initParam.operator" :fetch-suggestions="querySearch" clearable class="inputWidth"
-                        placeholder="经办人" />
-                </el-form-item>
-            </el-form>
+        <el-button el-button type="primary" icon="Camera" @click="showDia">扫码出库</el-button>
+        <el-dialog v-model="dialogFormVisible" title="扫码出库" :append-to-body="true" draggable :close-on-click-modal="false"
+            :close-on-press-escape="false" width="95%">
+            <inputSearch ref="inputSearchRef" style="margin:0 auto 40px auto;" @inputSearchData="inputSearchfn"></inputSearch>
+            <el-table :data="data.tableData" style="width: 100%" border height="450" :row-class-name="tableRowClassName">
+                <el-table-column :label="item.label" v-for="item, i in data.columns" :key="i" min-width="110" show-overflow-tooltip>
+                    <template #default="scope"><!--scope.row.medicineInfo[item.prop] -->
+                        {{ findFun(scope.row.medicineInfo[item.prop], item.list) }}
+                    </template>
+                </el-table-column>
+                <el-table-column :label="item.label" min-width="150" v-for="item,index in scanCodeTableOut" :key="index"
+                :fixed="item.prop == 'operation'&&'right'">
+                    <template #default="scope">
+                        <el-input v-if="['quantity','unitPrice','operator'].includes(item.prop)" v-model="scope.row[item.prop]" style="width: 100px;"/>
+                        <el-date-picker v-if="item.prop == 'date'" v-model="scope.row[item.prop]" type="date" value-format="YYYY-MM-DD" style="width: 120px;"/>
+                        <el-autocomplete v-if="item.prop == 'receivingUnit'" v-model="scope.row[item.prop]"
+                         :fetch-suggestions="querySearch1" clearable style="width: 120px;" />
+                        <el-button v-if="item.prop == 'operation'" type="danger" :icon="Delete" @click="deltable(scope.$index)">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
             <template #footer>
                 <span class="dialog-footer">
-                    <el-button type="primary" @click="submitForm(ruleFormRef)">加入暂存</el-button>
-                    <el-button @click="showinnerVisible">查看暂存</el-button>
-                    <el-button type="danger" @click="resetForm(ruleFormRef)">重置数据</el-button>
+                    <el-button @click="dialogFormVisible = false">关闭</el-button>
+                    <el-button type="danger" @click="resetForm">重置数据</el-button>
+                    <el-button type="primary" :disabled="data.tableData.length==0?true:false" @click="subStock">立即出库</el-button>
                 </span>
             </template>
-            <el-dialog v-model="innerVisible" title="出库数据" width="95%" append-to-body draggable :close-on-click-modal="false" :close-on-press-escape="false">
-                <el-table :data="data.tableData" style="width: 100%" border max-height="450"   :header-cell-style="{'background-color':'#ccc','color': 'white'}">
-                    <el-table-column :label="item.label" v-for="item,i in data.columns" :key="i" min-width="110" show-overflow-tooltip>
-                        <template #default="scope"><!--scope.row.medicineInfo[item.prop] -->
-                            {{ findFun(scope.row.medicineInfo[item.prop],item.list)}}
-                        </template>
-                    </el-table-column>
-                    <el-table-column prop="quantity" label="数量" min-width="110" show-overflow-tooltip/>
-                    <el-table-column prop="unitPrice" label="购进单价" min-width="110" show-overflow-tooltip/>
-                    <el-table-column prop="forwardingUnit" label="收货单位"  min-width="110" show-overflow-tooltip/>
-                    <el-table-column prop="date" label="出库日期" min-width="110" show-overflow-tooltip/>
-                    <el-table-column prop="operator" label="经办人" min-width="110" show-overflow-tooltip/>
-
-                    <el-table-column fixed="right" label="操作" min-width="110">
-                        <template #default="scope">
-                            <el-button type="primary" :icon="Edit" @click="handleClick(scope.row,scope.$index)" circle />
-                            <el-button type="danger" :icon="Delete" @click="delClick(scope.$index)" circle />
-                        </template>
-                    </el-table-column>
-                </el-table>
-                <template #footer>
-                    <span class="dialog-footer">
-                        <el-button @click="innerVisible = false">关闭</el-button>
-                        <el-button type="primary" @click="subStock">立即出库</el-button>
-                    </span>
-                </template>
-            </el-dialog>
         </el-dialog>
     </div>
 </template>
 
 <script setup lang="ts">
-import { reactive, ref } from 'vue'
-import type { FormInstance, FormRules} from 'element-plus'
-import { ElNotification} from 'element-plus'
-import { syrulesData,columnsTable } from "@/plugins/rulesData";
+import { reactive, ref,nextTick,watch, onMounted} from 'vue'
+import inputSearch from "./inputSearch.vue";
+import { scanCodeTableOut } from "@/plugins/rulesData";
 const dialogFormVisible = ref(false)
-const ruleFormRef = ref<FormInstance>()
-
-let rules:any = reactive({})
-
+watch(() => dialogFormVisible.value, (dy: any) => {
+  if(!dy)resetForm()
+})
+const inputSearchRef = ref<InstanceType<typeof inputSearch> | null>(null)
 import { 
-    medicListStockOut,
-    stockunit,//发货单位
-    operatorList,//经办人
-    stockTemplateIn,//单个出库
-    stockTemplateBatchOut,//批量出库
+    stockunit,//收发货单位
+    stockCodeOut
 } from "@/api";
-const innerVisible = ref(false)
-import { ElMessage, ElMessageBox } from 'element-plus'
-import {Delete,Edit,} from '@element-plus/icons-vue'
-const formLabelWidth = '110px'
-
-let initParam:any = reactive({
+import { ElMessage } from 'element-plus'
+import { Delete} from '@element-plus/icons-vue'
+import { syrulesData } from "@/plugins/rulesData";
+import { timesFn } from "@/plugins/settime";
+import {
+    medicListScanCode,
+    medicMsfx
+} from "@/api";
+let data: any = reactive({
+    tableData: [],
+    showDiaData: [],
+    itemPir: [],
+    rules1: {},
+    columns: [],// 渲染表格
+    selectType: [],//表格的下拉对应
+    editStrot: false,
+    editIndex: null,
+    qr:''
+})
+let initParam: any = reactive({
     "date": "",
-    "forwardingUnit": "",
+    "receivingUnit": "",
     "medicineInfo": {},
-    "operator":'',
-    "quantity": null,
-    "unitPrice":null
+    "operator": '',
+    "quantity": '',
+    "unitPrice": null
 })
-let data:any = reactive({
-    tableData:[],
-    showDiaData:[],
-    itemPir:[],
-    itemOpen:[],
-    rules1:{},
-    columns:[],// 渲染表格
-    selectType:[],//表格的下拉对应
-    editStrot:false,
-    editIndex:null
-}) 
-const emit:any = defineEmits(['scanCode'])
-//立即出库
-const subStock = async ()=>{
-    const reslut:any = await stockTemplateBatchOut({"stockOutList": data.tableData})
-    console.log('返回',reslut)
-    if(reslut.code==200 && reslut.msg=='出库成功'){
-        ElMessage.success(reslut.msg)
-        dialogFormVisible.value = false
-        innerVisible.value = false
-        emit('scanCode', '')
-        data.tableData = []
+
+/**
+ * 当前搜索到的样式
+ * @param param0 
+ */
+const tableRowClassName = ({rowIndex}: {
+  rowIndex: number
+}) => {
+    if(data.qr){
+        const i = data.tableData.findIndex((item:any) => item.Qrcode==data.qr)
+        if (rowIndex==i) { return 'success-row' }else{return ''}
+    }else{
+        return ''
     }
 }
 
-
+let rules: any = reactive({})
+const showDia = async () => {
+    dialogFormVisible.value = true
+    medicListStockFun()//获取入库表单
+    itemPirFun()
+    nextTick(()=>{
+        console.log('inputSearchRef',inputSearchRef.value)
+        inputSearchRef.value?.inputFocus()
+    })
+}
 //函数
-const findFun =  (data:any,list:any)=>{
-    if(list){
-        const b = list.find((item:any) => item.id==data)
-        if(b) return b.name
+const findFun = (data: any, list: any) => {
+    if (list) {
+        const b = list.find((item: any) => item.id == data)
+        if (b) return b.name
         else return ''
-    }else{
+    } else {
         return data
     }
 }
-const resetForm = (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  formEl.resetFields()
+
+//获取入库表单Api
+const medicListStockFun = async () => {
+    data.columns = []
+    const reslut: any = await medicListScanCode({})
+    console.log('表格', reslut)
+    if (reslut.code == 200 && reslut.msg == '查询成功') {
+        data.showDiaData = reslut.data?.list
+        data.rules1 = {}
+        data.columns = []
+        reslut.data?.list.forEach((value: any) => { //value设置成key
+            data.columns.push({ prop: value.field_name, label: value.name, list: value.list })
+            initParam.medicineInfo[value.field_name] = ''; // 这里可以根据需要设置其他值作为键的内容
+        });
+        Object.assign(rules, { ...data.rules1, ...syrulesData })
+        dialogFormVisible.value = true
+    }
 }
-//加入暂存区
-const submitForm = async (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  await formEl.validate((valid, fields) => {
-    if (valid) {
-        ElNotification({
-            title: '暂存成功',
-            message: 'ok,加入暂存成功,右下角按钮查看/提交暂存',
-            type: 'success',
+const emit: any = defineEmits(['scanCode'])
+const subStock = async ()=>{
+    const ab = data.tableData.every((item:any) => item.quantity != '' && item.operator != '' && item.date != '')
+    if(!ab){ElMessage.error('缺少数据提示:【数量】、【经办人】、【出库日期】是必填项哦!');return;}
+    else{
+        const arr = [...data.tableData]
+        arr.forEach((item:any)=>{
+            item.quantity = Number(item.quantity)
+            item.unitPrice = Number(item.unitPrice)
+
         })
-        console.log('提交',data.editStrot)
-        if(data.editStrot){//编辑状态
-            let {date,forwardingUnit,operator,quantity,unitPrice,medicineInfo} = initParam
-            data.tableData.splice(data.editIndex,1,{date,forwardingUnit,operator,quantity,unitPrice:unitPrice,medicineInfo:{...medicineInfo}})
-            console.log('编辑状态',data.tableData)
-        }else{//正常添加
-            let {date,forwardingUnit,operator,quantity,unitPrice,medicineInfo} = initParam
-            data.tableData.push({date,forwardingUnit,operator,quantity,unitPrice:unitPrice,medicineInfo:{...medicineInfo}})
-            console.log('正常添加',data.tableData)
+        const reslut:any = await stockCodeOut({stockOutList:arr})
+        console.log('添加成功')
+        if(reslut.code==200){
+            ElMessage.success(reslut.msg)
+            dialogFormVisible.value = false
+            emit('scanCode', '')
         }
-    } else {
-        ElMessage.error('请完善必填项')
     }
-  })
 }
-
-//函数
-const closeFun = async () => {
-    if(data.tableData.length==0){
-        dialogFormVisible.value = false
-        data.tableData = []
-    }else{
-        ElMessageBox.confirm('请检查录入数据是否已经提交,该操作将放弃出库信息,是否放弃?', '提示', {
-            confirmButtonText: '立即出库',
-            cancelButtonText: '放弃数据',
-            type: 'warning',
-            draggable: true,
-            center: true,
-        }).then(() => {
-            innerVisible.value = true
-        }).catch(() => {
-            dialogFormVisible.value = false
-            ElMessage.success('已放弃出库数据')
-        })
+/**
+ * 搜索
+ * @param e 追溯码
+ */
+const inputSearchfn = async (e:any)=>{
+    data.qr = e
+    const j = await SearchFind(e)
+    if (j) {ElMessage.error('提示:重复扫描添加数据了哦');return}
+    const reslut:any = await medicMsfx({code:e})
+    let initParamObj = {...initParam}
+    initParamObj.Qrcode = e
+    if (reslut.code==200 && reslut.msg=='查询成功') {
+        initParamObj.medicineInfo = reslut.data[0] || {}
+        initParamObj.date = timesFn()
+        data.tableData.push(initParamObj)
+        inputSearchRef.value?.inputFocus()
     }
 }
+/**
+ * 筛选是否已经扫描过
+ * @param j 追溯码 
+ */
+const SearchFind = (j:any)=>{
+    return new Promise(resolve=>{
+        const ab = data.tableData.find((item:any) => item.Qrcode==j)
+        ab==undefined?resolve(false):resolve(true)
+    })
+}
+
+/**
+ * 删除
+ * @param index 
+ */
+const deltable = async (index:any)=>{
+    data.tableData.splice(index,1)
+    nextTick(()=>{
+        inputSearchRef.value?.inputFocus()
+    })
+}
+
+//收发货单位
+const itemPirFun = async () => {
+    const reslut: any = await stockunit({ type: 2 })
+    const arrMap = reslut.data?.list
+    const arr:any = []
+    arrMap.forEach((item:any)=>{
+        arr.push({ value: item, link: item})  
+    })
+    restaurants1.value = arr
+}
 interface RestaurantItem {
   value: string
   link: string
 }
-const restaurants = ref<RestaurantItem[]>([])
-const querySearch = (queryString: string, cb: any) => {
+const restaurants1 = ref<RestaurantItem[]>([])
+const querySearch1 = (queryString: string, cb: any) => {
   const results = queryString
-    ? restaurants.value.filter(createFilter(queryString))
-    : restaurants.value
+    ? restaurants1.value.filter(createFilter(queryString))
+    : restaurants1.value
   cb(results)
 }
 const createFilter = (queryString: string) => {
@@ -209,119 +215,23 @@ const createFilter = (queryString: string) => {
     )
   }
 }
-
-const restaurants1 = ref<RestaurantItem[]>([])
-const querySearch1 = (queryString: string, cb: any) => {
-  const results = queryString
-    ? restaurants1.value.filter(createFilter(queryString))
-    : restaurants1.value
-  cb(results)
-}
-//收发货单位
-const itemPirFun = async()=>{
-    const reslut:any = await stockunit({ type: 3 })
-    const arrMap = reslut.data?.list
-    const arr:any = []
-    arrMap.forEach((item:any)=>{
-        arr.push({ value: item, link: item})  
-    })
-    restaurants1.value = arr
-}
-//经办人Api
-const operatorListApi = async()=>{
-    const reslut:any = await operatorList({})
-    const arrMap = reslut.data?.list
-    const arr:any = []
-    arrMap.forEach((item:any)=>{
-        arr.push({ value: item, link: item})  
-    })
-    restaurants.value = arr
-}
-
-
-//函数
-const showinnerVisible = async ()=>{
-    innerVisible.value = true
-    data.editStrot = false
-    console.log(data.tableData)
-}
-
-const showDia = async ()=>{
+/**
+ * 重置
+ */
+const resetForm = async ()=>{
     data.tableData = []
-    data.showDiaData = []
-    data.itemPir = []
-    data.itemOpen = []
-    data.rules1 = []
-    data.columns = []
-    data.selectType = []
-    data.editStrot = false
-    resetFun()//复原表单
-
-    medicListStockFun()//获取出库表单
-    itemPirFun()//发货单位
-    operatorListApi()//经办人
-}
-//复原表单
-const resetFun = async ()=>{
-    initParam.date = ''
-    initParam.forwardingUnit = ''
-    initParam.medicineInfo = {}
-    initParam.operator = ''
-    initParam.quantity = null
-    initParam.unitPrice = null
-    resetForm(ruleFormRef.value)
-}
-//获取出库表单Api
-const medicListStockFun = async ()=>{
-    data.columns = []
-    const reslut:any = await medicListStockOut({})
-    if(reslut.code==200 && reslut.msg=='查询成功'){
-        data.showDiaData = reslut.data?.list
-        data.rules1 = {}
-        data.columns = []
-        data.selectType = []
-        reslut.data?.list.forEach((value:any) => { //value设置成key
-            data.selectType.push({type:value.type,list:value.list})
-            data.columns.push({ prop: value.field_name, label: value.name, list:value.list})
-            initParam.medicineInfo[value.field_name] = ''; // 这里可以根据需要设置其他值作为键的内容
-            if(['product_id','enterprise_id','spec_id','batch_number','expiry_date','approval_number'].includes(value.field_name)){
-                if(value.type==6){
-                    data.rules1['medicineInfo.'+value.field_name] =  [{required: true,message: '必填项',trigger: 'change'}]
-                }else if(value.type==7){
-                    data.rules1['medicineInfo.'+value.field_name] =  [{required: true,message: '必填项',trigger: 'change'},{ pattern: /^(?:[1-9]\d*)$/, message: '请输入正整数', trigger: "blur" },]
-                }else{
-                    data.rules1['medicineInfo.'+value.field_name] = [{required: true,message: '必填项',trigger: 'change',}]
-                }
-            }
-        });
-        Object.assign(rules,{...data.rules1,...syrulesData})
-        console.log('表格', data.selectType)
-        dialogFormVisible.value = true
-    }
-}
-
-const handleClick = (datas:any,index:any) => {
-  data.editStrot = true
-  data.editIndex = index
-  let {date,forwardingUnit,operator,quantity,unitPrice,medicineInfo} = datas
-  Object.assign(initParam,{date,forwardingUnit,operator,quantity,unitPrice,medicineInfo:{...medicineInfo}})
-  innerVisible.value = false
-}
-const delClick = (index:any) => {
-    ElMessageBox.confirm('删除一条信息,是否继续?','删除',{
-      confirmButtonText: '确认删除',
-      cancelButtonText: 'Cancel',
-      type: 'warning',
-      center: true,
-    }).then(() => {
-        data.tableData.splice(index, 1);
-      ElMessage.success('已删除')
-    })
+    inputSearchRef?.value?.ClearFn()
+    inputSearchRef.value?.inputFocus()
 }
-
 </script>
 <style lang="scss">
 .inputWidth {
     width: 200px;
 }
+.el-table .warning-row {
+  --el-table-tr-bg-color: var(--el-color-warning-light-9);
+}
+.el-table .success-row {
+  --el-table-tr-bg-color: var(--el-color-success-light-9);
+}
 </style>

+ 2 - 2
src/views/stockcontrol/storagePut/Editinventory.vue

@@ -224,10 +224,10 @@ const medicListStockFun = async ()=>{
  * @param row 
  */
 const delClick = (row:any) => {
-    ElMessageBox.confirm('删除一条信息,是否继续?','删除',{
+    ElMessageBox.confirm('删除一条信息,将导致数量变化,是否继续?','删除',{
       confirmButtonText: '确认删除',
       cancelButtonText: 'Cancel',
-      type: 'warning',
+      type: 'error',
       center: true,
     }).then(async() => {
         const reslut:any = await stockdel({id:row.id})

+ 28 - 7
src/views/stockcontrol/storagePut/inputSearch.vue

@@ -4,7 +4,7 @@
             <img src="@/assets/img/BarCodeQR.svg" style="width: 80%;height: 80%;">
         </div>
         <div class="Qr-input">
-            <input class="Qr-input-type" ref="myInput" v-model="data.value" type="text" placeholder="请扫描追数码" >
+            <input class="Qr-input-type" ref="myInput" v-model="data.value" type="text" placeholder="请扫描追溯码">
             <el-icon :size="18" style="cursor: pointer;" @click="CloseFn">
                 <CircleClose />
             </el-icon>
@@ -14,12 +14,14 @@
 </template>
 
 <script setup lang="ts">
-import { ref, reactive } from "vue";
+import { ref, reactive,watch} from "vue";
 import { ElMessage, ElMessageBox } from 'element-plus'
 const myInput = ref()
 const data: any = reactive({
-    value: ''
+    value: '',
+    num:0
 })
+
 const emit: any = defineEmits(['inputSearchData',])
 //函数
 const inputFocus = async () => {
@@ -29,17 +31,36 @@ const inputFocus = async () => {
 }
 //函数
 const CloseFn = async () => {
-    data.value = '';
+    ClearFn()
     setTimeout(() => {
         myInput.value.focus()
     }, 1000)
 }
-//函数
+/**
+ * 清空
+ */
+const ClearFn = async ()=>{
+    data.value = '';
+}
+
+document.addEventListener('keydown',(event:any)=>{
+    // console.log('扫码枪',event)
+    data.num += 1
+    if(data.num == 1){data.value = ''}
+    if (event.code === 'Enter') { // 判断是否按下了回车键
+        data.value = event.target.value; // 获取扫描枪输入框的值    
+        onSubmit()
+    }
+})
 const onSubmit = async () => {
-    data.value ? emit('inputSearchData', data.value) : ElMessage.error('点击输入框在使用扫码枪扫码')
+    if(data.value){
+        emit('inputSearchData', data.value);data.num = 0 
+    }else{
+        ElMessage.error('点击输入框在使用扫码枪扫码')
+    }
 }
 defineExpose({
-    inputFocus, data
+    inputFocus, data,ClearFn
 })
 </script>
 <style lang="scss">

+ 31 - 7
src/views/stockcontrol/storagePut/scanCode.vue

@@ -11,10 +11,10 @@
                         {{ findFun(scope.row.medicineInfo[item.prop], item.list) }}
                     </template>
                 </el-table-column>
-                <el-table-column :label="item.label" min-width="150" v-for="item,index in columnsTable" :key="index"
+                <el-table-column :label="item.label" min-width="150" v-for="item,index in scanCodeTable" :key="index"
                 :fixed="item.prop == 'operation'&&'right'">
                     <template #default="scope">
-                        <el-input v-if="['quantity','unit_price','operator'].includes(item.prop)" v-model="scope.row[item.prop]" style="width: 100px;"/>
+                        <el-input v-if="['quantity','unitPrice','operator'].includes(item.prop)" v-model="scope.row[item.prop]" style="width: 100px;"/>
                         <el-date-picker v-if="item.prop == 'date'" v-model="scope.row[item.prop]" type="date" value-format="YYYY-MM-DD" style="width: 120px;"/>
                         <el-autocomplete v-if="item.prop == 'forwardingUnit'" v-model="scope.row[item.prop]"
                          :fetch-suggestions="querySearch1" clearable style="width: 120px;" />
@@ -25,6 +25,7 @@
             <template #footer>
                 <span class="dialog-footer">
                     <el-button @click="dialogFormVisible = false">关闭</el-button>
+                    <el-button type="danger" @click="resetForm">重置数据</el-button>
                     <el-button type="primary" :disabled="data.tableData.length==0?true:false" @click="subStock">立即入库</el-button>
                 </span>
             </template>
@@ -35,8 +36,14 @@
 <script setup lang="ts">
 import { reactive, ref,nextTick,watch, onMounted} from 'vue'
 import inputSearch from "./inputSearch.vue";
-import { columnsTable } from "@/plugins/rulesData";
+import { scanCodeTable } from "@/plugins/rulesData";
+import { timesFn } from "@/plugins/settime";
+
+
 const dialogFormVisible = ref(false)
+watch(() => dialogFormVisible.value, (dy: any) => {
+  if(!dy)resetForm()
+})
 const inputSearchRef = ref<InstanceType<typeof inputSearch> | null>(null)
 import { 
     stockunit,//收发货单位
@@ -70,6 +77,8 @@ let initParam: any = reactive({
     "unitPrice": null
 })
 
+
+
 /**
  * 当前搜索到的样式
  * @param param0 
@@ -125,10 +134,16 @@ const medicListStockFun = async () => {
 }
 const emit: any = defineEmits(['scanCode'])
 const subStock = async ()=>{
-    const ab = data.tableData.every((item:any) => item.quantity != '' && item.operator != '')
-    if(!ab){ElMessage.error('缺少数据提示:【数量】与【经办人】是必填项哦!');return;}
+    const ab = data.tableData.every((item:any) => item.quantity != '' && item.operator != '' && item.date != '')
+    if(!ab){ElMessage.error('缺少数据提示:【数量】、【经办人】、【入库日期】是必填项哦!');return;}
     else{
-        const reslut:any = await stockCodein({stockInList:{...data.tableData}})
+        const arr = [...data.tableData]
+        arr.forEach((item:any)=>{
+            item.quantity = Number(item.quantity)
+            item.unitPrice = Number(item.unitPrice)
+
+        })
+        const reslut:any = await stockCodein({stockInList:arr})
         console.log('添加成功')
         if(reslut.code==200){
             ElMessage.success(reslut.msg)
@@ -150,6 +165,8 @@ const inputSearchfn = async (e:any)=>{
     initParamObj.Qrcode = e
     if (reslut.code==200 && reslut.msg=='查询成功') {
         initParamObj.medicineInfo = reslut.data[0] || {}
+        initParamObj.date = timesFn()
+        console.log('initParamObj',initParamObj)
         data.tableData.push(initParamObj)
         inputSearchRef.value?.inputFocus()
     }
@@ -204,7 +221,14 @@ const createFilter = (queryString: string) => {
     )
   }
 }
-
+/**
+ * 重置
+ */
+const resetForm = async ()=>{
+    data.tableData = []
+    inputSearchRef?.value?.ClearFn()
+    inputSearchRef.value?.inputFocus()
+}
 </script>
 <style lang="scss">
 .inputWidth {

BIN
出入库管理系统.rar


+ 1 - 0
出入库管理系统/css/1.dfb159e9.css

@@ -0,0 +1 @@
+.searchAdd{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding) var(--y-padding) 0 var(--y-padding);justify-content:space-between;margin-bottom:var(--y-margin)}.searchAdd,.searchAdd-left{display:flex;align-items:center}.el-form-item{display:flex;--font-size:14px}.y-tabs{background:var(--y-card-background);border-radius:var(--y-radius);margin-top:var(--y-margin)}.y-tabs-headers{border-bottom:var(--y-border);box-sizing:border-box}.y-tabs-headers,.y-tabs-item{padding:var(--y-padding)}.mark-green1{width:30px;height:30px;background:#d8f2e3}.mark-green1,.mark-green2{border-radius:50%;display:flex;align-items:center;justify-content:center}.mark-green2{width:70%;height:70%;background:#b2efcc}.mark-green3{width:50%;height:50%;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#69d297}.bg{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding)}.bg,.bg-tit{margin-bottom:var(--y-margin)}.bg-tit{padding:var(--y-padding) 0;border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;display:flex;align-items:center;justify-content:space-between}.user-conter{gap:20px;display:flex}.user-conter-table{flex:.6}.user-conter-prog{flex:.4}

+ 1 - 0
出入库管理系统/css/134.41fb80da.css

@@ -0,0 +1 @@
+.mark-green1{width:30px;height:30px;background:#d8f2e3}.mark-green1,.mark-green2{border-radius:50%;display:flex;align-items:center;justify-content:center}.mark-green2{width:70%;height:70%;background:#b2efcc}.mark-green3{width:50%;height:50%;justify-content:center;border-radius:50%;background:#69d297}.bg-tit,.mark-green3{display:flex;align-items:center}.bg-tit{padding:var(--y-padding) 0;border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;margin-bottom:var(--y-margin);justify-content:space-between}.y-tabs{background:var(--y-card-background);border-radius:var(--y-radius);margin-top:var(--y-margin)}.y-tabs-headers{border-bottom:var(--y-border);box-sizing:border-box}.bg,.y-tabs-headers,.y-tabs-item{padding:var(--y-padding)}.bg{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);margin-bottom:var(--y-margin)}.statistics{display:flex;align-items:center}.statistics-right{display:block;line-height:25px;margin-left:var(--y-margin)}.essentialinfo{overflow-y:auto}.essentialinfo-main{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));grid-gap:0 20px}

+ 1 - 0
出入库管理系统/css/173.d4407f76.css

@@ -0,0 +1 @@
+.y-tabs{background:var(--y-card-background);border-radius:var(--y-radius);margin-top:var(--y-margin)}.y-tabs-headers{border-bottom:var(--y-border);box-sizing:border-box}.y-tabs-headers,.y-tabs-item{padding:var(--y-padding)}.searchAdd{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding) var(--y-padding) 0 var(--y-padding);justify-content:space-between;margin-bottom:var(--y-margin)}.searchAdd,.searchAdd-left{display:flex;align-items:center}.el-form-item{display:flex;--font-size:14px}.mark-green1{width:30px;height:30px;background:#d8f2e3}.mark-green1,.mark-green2{border-radius:50%;display:flex;align-items:center;justify-content:center}.mark-green2{width:70%;height:70%;background:#b2efcc}.mark-green3{width:50%;height:50%;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#69d297}.bg{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding)}.bg,.bg-tit{margin-bottom:var(--y-margin)}.bg-tit{padding:var(--y-padding) 0;border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;display:flex;align-items:center;justify-content:space-between}

+ 1 - 0
出入库管理系统/css/253.b6e1abc9.css

@@ -0,0 +1 @@
+.y-tabs{background:var(--y-card-background);border-radius:var(--y-radius);margin-top:var(--y-margin)}.y-tabs-headers{border-bottom:var(--y-border);box-sizing:border-box}.y-tabs-headers,.y-tabs-item{padding:var(--y-padding)}.card-header{display:flex;justify-content:space-between;align-items:center}.el-card.is-always-shadow{box-shadow:none}.text{font-size:14px}.item{margin-bottom:18px}.el-card__header{padding:var(--y-padding);border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box}.box-card{border:none}

+ 0 - 0
出入库管理系统/css/342.4f034e44.css


+ 1 - 0
出入库管理系统/css/401.3289778d.css

@@ -0,0 +1 @@
+.mark-green1{width:30px;height:30px;background:#d8f2e3}.mark-green1,.mark-green2{border-radius:50%;display:flex;align-items:center;justify-content:center}.mark-green2{width:70%;height:70%;background:#b2efcc}.mark-green3{width:50%;height:50%;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#69d297}.bg{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding);margin-bottom:var(--y-margin)}.bg-tit{padding:var(--y-padding) 0;border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box}.bg-tit,.searchAdd{margin-bottom:var(--y-margin);display:flex;align-items:center;justify-content:space-between}.searchAdd{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding) var(--y-padding) 0 var(--y-padding)}.searchAdd-left{display:flex;align-items:center}.el-form-item{display:flex;--font-size:14px}.company{-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-tree-node__content{height:50px}.custom-tree-node{flex:1;display:flex;align-items:center}.el-tree-node:focus>.el-tree-node__content,.el-tree-node__content:hover{border-radius:20px 0 20px 0}.custom-tree-node>span:first-child{flex:1;display:block}.el-tree{width:100%}

+ 0 - 0
出入库管理系统/css/429.4f034e44.css


+ 1 - 0
出入库管理系统/css/521.42ad3fcf.css

@@ -0,0 +1 @@
+.not-container[data-v-708bd337]{height:100%}.not-container[data-v-708bd337],.not-detail[data-v-708bd337]{display:flex;align-items:center;justify-content:center;flex-direction:column}.not-detail[data-v-708bd337]{line-height:80px}.not-detail p[data-v-708bd337]{font-size:24px}

+ 0 - 0
出入库管理系统/css/538.4f034e44.css


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/css/633.8b596f1b.css


+ 1 - 0
出入库管理系统/css/670.b00fd934.css

@@ -0,0 +1 @@
+.y-tabs{background:var(--y-card-background);border-radius:var(--y-radius);margin-top:var(--y-margin)}.y-tabs-headers{border-bottom:var(--y-border);box-sizing:border-box}.y-tabs-headers,.y-tabs-item{padding:var(--y-padding)}.searchAdd{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding) var(--y-padding) 0 var(--y-padding);justify-content:space-between;margin-bottom:var(--y-margin)}.searchAdd,.searchAdd-left{display:flex;align-items:center}.el-form-item{display:flex;--font-size:14px}.mark-green1{width:30px;height:30px;background:#d8f2e3}.mark-green1,.mark-green2{border-radius:50%;display:flex;align-items:center;justify-content:center}.mark-green2{width:70%;height:70%;background:#b2efcc}.mark-green3{width:50%;height:50%;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#69d297}.bg{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding)}.bg,.bg-tit{margin-bottom:var(--y-margin)}.bg-tit{padding:var(--y-padding) 0;border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;display:flex;align-items:center;justify-content:space-between}

+ 1 - 0
出入库管理系统/css/781.4b5d2e9a.css

@@ -0,0 +1 @@
+.inputWidth{width:200px}.searchAdd{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding) var(--y-padding) 0 var(--y-padding);justify-content:space-between;margin-bottom:var(--y-margin)}.searchAdd,.searchAdd-left{display:flex;align-items:center}.el-form-item{display:flex;--font-size:14px}.mark-green1{width:30px;height:30px;background:#d8f2e3}.mark-green1,.mark-green2{border-radius:50%;display:flex;align-items:center;justify-content:center}.mark-green2{width:70%;height:70%;background:#b2efcc}.mark-green3{width:50%;height:50%;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#69d297}.bg{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding)}.bg,.bg-tit{margin-bottom:var(--y-margin)}.bg-tit{padding:var(--y-padding) 0;border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;display:flex;align-items:center;justify-content:space-between}.storagePut{-webkit-user-select:none;-moz-user-select:none;user-select:none}

+ 1 - 0
出入库管理系统/css/870.9502257d.css

@@ -0,0 +1 @@
+.searchAdd{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding) var(--y-padding) 0 var(--y-padding);justify-content:space-between;margin-bottom:var(--y-margin)}.searchAdd,.searchAdd-left{display:flex;align-items:center}.el-form-item{display:flex;--font-size:14px}.y-tabs{background:var(--y-card-background);border-radius:var(--y-radius);margin-top:var(--y-margin)}.y-tabs-headers{border-bottom:var(--y-border);box-sizing:border-box}.y-tabs-headers,.y-tabs-item{padding:var(--y-padding)}.mark-green1{width:30px;height:30px;background:#d8f2e3}.mark-green1,.mark-green2{border-radius:50%;display:flex;align-items:center;justify-content:center}.mark-green2{width:70%;height:70%;background:#b2efcc}.mark-green3{width:50%;height:50%;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#69d297}.bg{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding);margin-bottom:var(--y-margin)}.bg-tit{padding:var(--y-padding) 0;border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;align-items:center;justify-content:space-between}.bg-tit,.storageInquire-main{margin-bottom:var(--y-margin);display:flex}.storageInquire-main{background:var(--y-card-background);border-radius:var(--y-radius);gap:60px}.storageInquire-main-bg{display:flex;flex-direction:column;align-items:center;justify-content:center}

File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/css/902.cfdbba09.css


+ 1 - 0
出入库管理系统/css/978.778e9831.css

@@ -0,0 +1 @@
+.bg{border-radius:var(--el-card-border-radius);background-color:var(--el-card-bg-color);overflow:hidden;color:var(--el-text-color-primary);transition:var(--el-transition-duration);--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-bg-color:var(--el-fill-color-blank);padding:var(--y-padding);margin-bottom:var(--y-margin)}.card-header{display:flex;justify-content:space-between;align-items:center}.el-card.is-always-shadow{box-shadow:none}.text{font-size:14px}.item{margin-bottom:18px}.el-card__header{padding:var(--y-padding);border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box}.box-card{border:none}.statistics{display:flex;align-items:center}.statistics-right{display:block;line-height:25px;margin-left:var(--y-margin)}.y-tabs{background:var(--y-card-background);border-radius:var(--y-radius);margin-top:var(--y-margin)}.y-tabs-headers{border-bottom:var(--y-border);box-sizing:border-box}.y-tabs-headers,.y-tabs-item{padding:var(--y-padding)}.home{overflow-y:auto}.home-main{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));grid-gap:20px}.home-echarts{display:grid;grid-template-columns:repeat(auto-fit,minmax(500px,1fr));grid-gap:20px}

File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/css/app.a480b5c8.css


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/css/chunk-vendors.c5343724.css


BIN
出入库管理系统/favicon.ico


BIN
出入库管理系统/fonts/1639093199705607.23cb1cbf.ttf


BIN
出入库管理系统/fonts/1640748942940454.8d571a5b.ttf


BIN
出入库管理系统/fonts/1645487823772202.188bbc5c.otf


BIN
出入库管理系统/fonts/Logo.10a8e37a.ttf


BIN
出入库管理系统/fonts/UnidreamLED.df04847a.ttf


BIN
出入库管理系统/fonts/douyuzhuiguangti.23cb1cbf.ttf


BIN
出入库管理系统/fonts/iconfont.b67f6d6f.ttf


BIN
出入库管理系统/img/1700227167756.2203a3ea.jpg


BIN
出入库管理系统/img/1700227576514.0f0dfe16.jpg


BIN
出入库管理系统/img/1700228167058.6445352d.jpg


BIN
出入库管理系统/img/1700228181332.9528a5c4.jpg


BIN
出入库管理系统/img/1700228207945.f1b33668.jpg


BIN
出入库管理系统/img/1700450751581.b7423ad9.png


BIN
出入库管理系统/img/404.52ac3ffa.png


+ 1 - 0
出入库管理系统/img/BarCodeQR.69f4fb5e.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1703836388491" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7152" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M170.6496 263.68h20.48v503.5776h-20.48z m50.3552 0h98.0224v503.5776H221.0048z m120.32 0h55.296v503.5776h-55.296z m465.408 0h55.296v503.5776h-55.296z m-232.704 0h18.432v503.5776h-18.432z m170.6496 0h18.432v503.5776h-18.432z m-325.7856 0h92.16v503.5776h-92.16z m201.6768 0h92.16v503.5776h-92.16z m333.5936 684.1344v-157.9776H1024V1024h-221.4912v-76.1856h151.6544zM1024 117.0176v117.0176h-69.8368V76.0576h-151.6544V0H1024zM69.7344 947.8144h151.6288V1024H0v-234.1632h69.7344z m0-871.7568v157.9776H0V0h221.3632v76.0576H69.7344z" fill="#409eff" p-id="7153"></path></svg>

BIN
出入库管理系统/img/icons/android-chrome-192x192.png


BIN
出入库管理系统/img/icons/android-chrome-512x512.png


BIN
出入库管理系统/img/icons/android-chrome-maskable-192x192.png


BIN
出入库管理系统/img/icons/android-chrome-maskable-512x512.png


BIN
出入库管理系统/img/icons/apple-touch-icon-120x120.png


BIN
出入库管理系统/img/icons/apple-touch-icon-152x152.png


BIN
出入库管理系统/img/icons/apple-touch-icon-180x180.png


BIN
出入库管理系统/img/icons/apple-touch-icon-60x60.png


BIN
出入库管理系统/img/icons/apple-touch-icon-76x76.png


BIN
出入库管理系统/img/icons/apple-touch-icon.png


BIN
出入库管理系统/img/icons/favicon-16x16.png


BIN
出入库管理系统/img/icons/favicon-32x32.png


BIN
出入库管理系统/img/icons/msapplication-icon-144x144.png


BIN
出入库管理系统/img/icons/mstile-150x150.png


+ 3 - 0
出入库管理系统/img/icons/safari-pinned-tab.svg

@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M8.00251 14.9297L0 1.07422H6.14651L8.00251 4.27503L9.84583 1.07422H16L8.00251 14.9297Z" fill="black"/>
+</svg>

+ 86 - 0
出入库管理系统/index.html

@@ -0,0 +1,86 @@
+<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="ico" href="/favicon.ico"><title>baozhidao-putoutstorage</title><style>* {
+      margin: 0;
+      padding: 0;
+    }
+
+    .loadingSpinn {
+      height: 100vh;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+    }
+
+    .atom-spinner,
+    .atom-spinner * {
+      box-sizing: border-box;
+    }
+
+    .atom-spinner {
+      height:100px;
+      width: 100px;
+      overflow: hidden;
+    }
+
+    .atom-spinner .spinner-inner {
+      position: relative;
+      display: block;
+      height: 100%;
+      width: 100%;
+    }
+
+    .atom-spinner .spinner-circle {
+      display: block;
+      position: absolute;
+      color: #409eff;
+      font-size: calc(60px * 0.24);
+      top: 50%;
+      left: 50%;
+      transform: translate(-50%, -50%);
+    }
+
+    .atom-spinner .spinner-line {
+      position: absolute;
+      width: 100%;
+      height: 100%;
+      border-radius: 50%;
+      animation-duration: 1s;
+      border-left-width: calc(60px / 25);
+      border-top-width: calc(60px / 25);
+      border-left-color: #409eff;
+      border-left-style: solid;
+      border-top-style: solid;
+      border-top-color: transparent;
+    }
+
+    .atom-spinner .spinner-line:nth-child(1) {
+      animation: atom-spinner-animation-1 1s linear infinite;
+      transform: rotateZ(120deg) rotateX(66deg) rotateZ(0deg);
+    }
+
+    .atom-spinner .spinner-line:nth-child(2) {
+      animation: atom-spinner-animation-2 1s linear infinite;
+      transform: rotateZ(240deg) rotateX(66deg) rotateZ(0deg);
+    }
+
+    .atom-spinner .spinner-line:nth-child(3) {
+      animation: atom-spinner-animation-3 1s linear infinite;
+      transform: rotateZ(360deg) rotateX(66deg) rotateZ(0deg);
+    }
+
+    @keyframes atom-spinner-animation-1 {
+      100% {
+        transform: rotateZ(120deg) rotateX(66deg) rotateZ(360deg);
+      }
+    }
+
+    @keyframes atom-spinner-animation-2 {
+      100% {
+        transform: rotateZ(240deg) rotateX(66deg) rotateZ(360deg);
+      }
+    }
+
+    @keyframes atom-spinner-animation-3 {
+      100% {
+        transform: rotateZ(360deg) rotateX(66deg) rotateZ(360deg);
+      }
+    }</style><script defer="defer" src="/js/chunk-vendors.4c222c47.js"></script><script defer="defer" src="/js/app.696245ae.js"></script><link href="/css/chunk-vendors.c5343724.css" rel="stylesheet"><link href="/css/app.a480b5c8.css" rel="stylesheet"><!--[if IE]><link rel="icon" type="image/svg+xml" href="/img/icons/favicon.svg"><![endif]--><link rel="icon" type="image/png" sizes="32x32" href="/./favicon.ico"><link rel="icon" type="image/png" sizes="16x16" href="/./favicon.ico"><link rel="manifest" href="/manifest.json"><meta name="theme-color" content="#4DBA87"><meta name="apple-mobile-web-app-capable" content="no"><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta name="apple-mobile-web-app-title" content="baozhidao-putoutstorage"><link rel="apple-touch-icon" href="/./favicon.ico"><link rel="mask-icon" href="/./favicon.ico" color="#4DBA87"><meta name="msapplication-TileImage" content="/./favicon.ico"><meta name="msapplication-TileColor" content="#000000"></head><body><noscript><strong>We're sorry but baozhidao-putoutstorage doesn't work properly without JavaScript enabled.Please enable it to continue.</strong></noscript><div id="app"><div class="loadingSpinn"><div class="atom-spinner"><div class="spinner-inner"><div class="spinner-line"></div><div class="spinner-line"></div><div class="spinner-line"></div><div class="spinner-circle">&#9679;</div></div></div></div></div></body></html>

File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/1.3a6e7c12.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/1.3a6e7c12.js.map


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/134.28246f67.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/134.28246f67.js.map


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/173.5a526efa.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/173.5a526efa.js.map


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/253.6287b710.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/253.6287b710.js.map


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/318.92d756ee.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/318.92d756ee.js.map


+ 2 - 0
出入库管理系统/js/342.a30662e9.js

@@ -0,0 +1,2 @@
+"use strict";(self["webpackChunkbaozhidao_putoutstorage"]=self["webpackChunkbaozhidao_putoutstorage"]||[]).push([[342],{8342:function(t,u,o){o.r(u),o.d(u,{default:function(){return i}});var r=o(6252);const e={class:""};function n(t,u){const o=(0,r.up)("router-view");return(0,r.wg)(),(0,r.iD)("div",e,[(0,r.Wm)(o)])}var a=o(3744);const s={},c=(0,a.Z)(s,[["render",n]]);var i=c}}]);
+//# sourceMappingURL=342.a30662e9.js.map

+ 1 - 0
出入库管理系统/js/342.a30662e9.js.map

@@ -0,0 +1 @@
+{"version":3,"file":"js/342.a30662e9.js","mappings":"iNACSA,MAAM,I,kEAAXC,EAAAA,EAAAA,IAAmC,MAAnCC,EAAmC,EAArBC,EAAAA,EAAAA,IAAeC,I,eCAjC,MAAMC,EAAS,CAAC,EAKVC,GAA2B,OAAgBD,EAAQ,CAAC,CAAC,SAASE,KAEpE,O","sources":["webpack://baozhidao-putoutstorage/./src/views/stockcontrol/index.vue","webpack://baozhidao-putoutstorage/./src/views/stockcontrol/index.vue?4e47"],"sourcesContent":["<template>\r\n    <div class=\"\"><router-view /></div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n</script>\r\n<style lang=\"scss\">\r\n/* @import url(); 引入css类 */\r\n\r\n</style>n","import { render } from \"./index.vue?vue&type=template&id=65f5b331\"\nconst script = {}\n\nimport \"./index.vue?vue&type=style&index=0&id=65f5b331&lang=scss\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["class","_createElementBlock","_hoisted_1","_createVNode","_component_router_view","script","__exports__","render"],"sourceRoot":""}

File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/401.152932dc.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/401.152932dc.js.map


+ 2 - 0
出入库管理系统/js/429.1525ad26.js

@@ -0,0 +1,2 @@
+"use strict";(self["webpackChunkbaozhidao_putoutstorage"]=self["webpackChunkbaozhidao_putoutstorage"]||[]).push([[429],{8429:function(t,u,o){o.r(u),o.d(u,{default:function(){return i}});var r=o(6252);const e={class:""};function n(t,u){const o=(0,r.up)("router-view");return(0,r.wg)(),(0,r.iD)("div",e,[(0,r.Wm)(o)])}var a=o(3744);const s={},c=(0,a.Z)(s,[["render",n]]);var i=c}}]);
+//# sourceMappingURL=429.1525ad26.js.map

+ 1 - 0
出入库管理系统/js/429.1525ad26.js.map

@@ -0,0 +1 @@
+{"version":3,"file":"js/429.1525ad26.js","mappings":"iNACSA,MAAM,I,kEAAXC,EAAAA,EAAAA,IAAmC,MAAnCC,EAAmC,EAArBC,EAAAA,EAAAA,IAAeC,I,eCAjC,MAAMC,EAAS,CAAC,EAKVC,GAA2B,OAAgBD,EAAQ,CAAC,CAAC,SAASE,KAEpE,O","sources":["webpack://baozhidao-putoutstorage/./src/views/salesmanagement/index.vue","webpack://baozhidao-putoutstorage/./src/views/salesmanagement/index.vue?4551"],"sourcesContent":["<template>\r\n    <div class=\"\"><router-view /></div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n</script>\r\n<style lang=\"scss\">\r\n/* @import url(); 引入css类 */\r\n\r\n</style>n","import { render } from \"./index.vue?vue&type=template&id=ed618c96\"\nconst script = {}\n\nimport \"./index.vue?vue&type=style&index=0&id=ed618c96&lang=scss\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["class","_createElementBlock","_hoisted_1","_createVNode","_component_router_view","script","__exports__","render"],"sourceRoot":""}

+ 2 - 0
出入库管理系统/js/521.87d3381f.js

@@ -0,0 +1,2 @@
+"use strict";(self["webpackChunkbaozhidao_putoutstorage"]=self["webpackChunkbaozhidao_putoutstorage"]||[]).push([[521],{9532:function(t,a,n){n.r(a),n.d(a,{default:function(){return v}});n(560);var o=n(6252),s=n(2262),u=n.p+"img/404.52ac3ffa.png",e=n(2201);const c=t=>((0,o.dD)("data-v-708bd337"),t=t(),(0,o.Cn)(),t),r={class:"not-container"},i=c((()=>(0,o._)("img",{src:u,class:"not-img",alt:"404"},null,-1))),l={class:"not-detail"},d=c((()=>(0,o._)("p",null,"很遗憾,您访问的页面不存在",-1)));var p=(0,o.aZ)({__name:"404",setup(t){const a=(0,e.tv)();return(t,n)=>{const u=(0,o.up)("el-button");return(0,o.wg)(),(0,o.iD)("div",r,[i,(0,o._)("div",l,[d,(0,o.Wm)(u,{type:"primary",onClick:n[0]||(n[0]=t=>(0,s.SU)(a).push("/"))},{default:(0,o.w5)((()=>[(0,o.Uk)("返回首页")])),_:1})])])}}}),_=n(3744);const f=(0,_.Z)(p,[["__scopeId","data-v-708bd337"]]);var v=f}}]);
+//# sourceMappingURL=521.87d3381f.js.map

File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/521.87d3381f.js.map


+ 2 - 0
出入库管理系统/js/538.0ccb0686.js

@@ -0,0 +1,2 @@
+"use strict";(self["webpackChunkbaozhidao_putoutstorage"]=self["webpackChunkbaozhidao_putoutstorage"]||[]).push([[538],{8538:function(t,u,o){o.r(u),o.d(u,{default:function(){return i}});var r=o(6252);const e={class:""};function n(t,u){const o=(0,r.up)("router-view");return(0,r.wg)(),(0,r.iD)("div",e,[(0,r.Wm)(o)])}var a=o(3744);const s={},c=(0,a.Z)(s,[["render",n]]);var i=c}}]);
+//# sourceMappingURL=538.0ccb0686.js.map

+ 1 - 0
出入库管理系统/js/538.0ccb0686.js.map

@@ -0,0 +1 @@
+{"version":3,"file":"js/538.0ccb0686.js","mappings":"iNACSA,MAAM,I,kEAAXC,EAAAA,EAAAA,IAAmC,MAAnCC,EAAmC,EAArBC,EAAAA,EAAAA,IAAeC,I,eCAjC,MAAMC,EAAS,CAAC,EAKVC,GAA2B,OAAgBD,EAAQ,CAAC,CAAC,SAASE,KAEpE,O","sources":["webpack://baozhidao-putoutstorage/./src/views/usermanagement/index.vue","webpack://baozhidao-putoutstorage/./src/views/usermanagement/index.vue?46db"],"sourcesContent":["<template>\r\n    <div class=\"\"><router-view /></div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n</script>\r\n<style lang=\"scss\">\r\n/* @import url(); 引入css类 */\r\n\r\n</style>n","import { render } from \"./index.vue?vue&type=template&id=663c5078\"\nconst script = {}\n\nimport \"./index.vue?vue&type=style&index=0&id=663c5078&lang=scss\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["class","_createElementBlock","_hoisted_1","_createVNode","_component_router_view","script","__exports__","render"],"sourceRoot":""}

File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/633.9006f139.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/633.9006f139.js.map


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/670.29c2491b.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/670.29c2491b.js.map


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/781.9b5f0f1f.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/781.9b5f0f1f.js.map


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/870.fdbbaebc.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/870.fdbbaebc.js.map


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/902.035bafaf.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/902.035bafaf.js.map


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/978.31702af1.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/978.31702af1.js.map


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/app.696245ae.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/app.696245ae.js.map


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/chunk-vendors.4c222c47.js


File diff suppressed because it is too large
+ 0 - 0
出入库管理系统/js/chunk-vendors.4c222c47.js.map


Some files were not shown because too many files changed in this diff