From 7e0ac356959af6c0264a257fa57bc8f0e1318c71 Mon Sep 17 00:00:00 2001
From: yaowanxin <3588231647@qq.com>
Date: 星期二, 30 十二月 2025 18:02:08 +0800
Subject: [PATCH] 区分入库管理,出库管理的成品出库导出

---
 src/views/inventoryManagement/receiptManagement/index.vue |  313 +++++++++++++++++++++++++++++++++------------------
 1 files changed, 200 insertions(+), 113 deletions(-)

diff --git a/src/views/inventoryManagement/receiptManagement/index.vue b/src/views/inventoryManagement/receiptManagement/index.vue
index f07100f..24f7174 100644
--- a/src/views/inventoryManagement/receiptManagement/index.vue
+++ b/src/views/inventoryManagement/receiptManagement/index.vue
@@ -1,76 +1,9 @@
 <template>
   <div class="app-container">
     <el-tabs v-model="activeTab" @tab-change="handleTabChange">
-      <el-tab-pane label="鎴愬搧鍏ュ簱" name="production">
-        <div class="search_form">
-          <div>
-<!--            <span class="search_title">瀹㈡埛鍚嶇О锛�</span>-->
-<!--            <el-input v-model="searchForm.customerName" style="width: 240px" placeholder="璇疯緭鍏�" @change="handleQuery"-->
-<!--              clearable prefix-icon="Search" />-->
-            <span class="search_title ml10">鍏ュ簱鏃ユ湡锛�</span>
-            <el-date-picker
-              v-model="searchForm.timeStr"
-              type="date"
-              placeholder="璇烽�夋嫨鏃ユ湡"
-              value-format="YYYY-MM-DD"
-              format="YYYY-MM-DD"
-              clearable
-              @change="handleQuery"
-            />
-            <span class="search_title ml10">浜у搧澶х被锛�</span>
-            <el-input
-              v-model="searchForm.productCategory"
-              style="width: 240px"
-              placeholder="璇疯緭鍏�"
-              clearable
-            />
-            <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
-          </div>
-          <div>
-            <el-button @click="handleOut">瀵煎嚭</el-button>
-            <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
-          </div>
-        </div>
-        <div class="table_list">
-          <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
-            :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%"
-            :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)">
-            <el-table-column align="center" type="selection" width="55" />
-            <el-table-column align="center" label="搴忓彿" type="index" width="60" />
-            <el-table-column label="鍏ュ簱鏃堕棿" prop="createTime" show-overflow-tooltip />
-            <!-- <el-table-column label="鍏ュ簱鎵规" prop="inboundBatches" show-overflow-tooltip /> -->
-<!--            <el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" width="240" show-overflow-tooltip />-->
-            <el-table-column label="浜у搧澶х被" prop="productCategory" show-overflow-tooltip />
-            <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" show-overflow-tooltip />
-            <el-table-column label="鍗曚綅" prop="unit" width="70" show-overflow-tooltip />
-						<el-table-column label="鍏ュ簱鏁伴噺" prop="inboundNum" width="100" show-overflow-tooltip />
-<!--						<el-table-column label="鍓╀綑搴撳瓨" prop="inboundNum0" show-overflow-tooltip />-->
-						<el-table-column label="鍗曚环(鍏�)" prop="unitPrice" width="150"></el-table-column>
-						<el-table-column label="鎬讳环(鍏�)" prop="totalPrice" width="150"></el-table-column>
-<!--            <el-table-column label="鍚◣鍗曚环" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />-->
-<!--            <el-table-column label="鍚◣鎬讳环" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />-->
-<!--            <el-table-column label="绋庣巼(%)" prop="taxRate" width="80" show-overflow-tooltip />-->
-<!--            <el-table-column label="涓嶅惈绋庢�讳环" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />-->
-            <!-- <el-table-column label="鍏ュ簱浜�" prop="createBy" width="80" show-overflow-tooltip /> -->
-            <el-table-column fixed="right" label="鎿嶄綔" min-width="60" align="center">
-              <template #default="scope">
-                <el-button link type="primary" size="small" @click="openForm('edit', scope.row, 'production');">缂栬緫</el-button>
-                <el-button link type="success" size="small" @click="showQRCode(scope.row)">鐢熸垚鏉″舰鐮�</el-button>
-                <el-button link type="success" size="small" @click="showERCode(scope.row)">鐢熸垚浜岀淮鐮�</el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-          <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
-            :page="page.current" :limit="page.size" @pagination="paginationChange" />
-        </div>
-      </el-tab-pane>
-      
-     <el-tab-pane label="鍘熸枡鍏ュ簱" name="purchase">
+     <el-tab-pane label="閲囪喘鍏ュ簱" name="purchase">
        <div class="search_form">
          <div>
-<!--&lt;!&ndash;            <span class="search_title">渚涘簲鍟嗗悕绉帮細</span>&ndash;&gt;-->
-<!--&lt;!&ndash;            <el-input v-model="searchForm.supplierName" style="width: 240px" placeholder="璇疯緭鍏�" @change="handleQuery"&ndash;&gt;-->
-<!--&lt;!&ndash;              clearable prefix-icon="Search" />&ndash;&gt;-->
            <span class="search_title ml10">鍏ュ簱鏃ユ湡锛�</span>
            <el-date-picker
              v-model="searchForm.timeStr"
@@ -103,25 +36,23 @@
            <el-table-column align="center" type="selection" width="55" />
            <el-table-column align="center" label="搴忓彿" type="index" width="60" />
            <el-table-column label="鍏ュ簱鏃堕棿" prop="createTime" width="100" show-overflow-tooltip />
-           <!-- <el-table-column label="鍏ュ簱鎵规" prop="inboundBatches" width="160" show-overflow-tooltip /> -->
-<el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" width="240" show-overflow-tooltip />
-           <el-table-column label="浜у搧澶х被" prop="productCategory" show-overflow-tooltip />
-           <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" show-overflow-tooltip />
-           <el-table-column label="鍗曚綅" prop="unit" width="70" show-overflow-tooltip />
-					 <el-table-column label="鍏ュ簱鏁伴噺" prop="inboundNum" width="100" show-overflow-tooltip />
-<!--					 <el-table-column label="鍓╀綑搴撳瓨" prop="inboundNum0" show-overflow-tooltip />-->
-					 <el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" width="150"></el-table-column>
-					 <el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" width="150"></el-table-column>
-<!--&lt;!&ndash;            <el-table-column label="鍚◣鍗曚环" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />&ndash;&gt;-->
-<!--&lt;!&ndash;            <el-table-column label="鍚◣鎬讳环" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />&ndash;&gt;-->
-<!--&lt;!&ndash;            <el-table-column label="绋庣巼(%)" prop="taxRate" width="80" show-overflow-tooltip />&ndash;&gt;-->
-<!--&lt;!&ndash;            <el-table-column label="涓嶅惈绋庢�讳环" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />&ndash;&gt;-->
-           <el-table-column label="鍏ュ簱浜�" prop="createBy" width="80" show-overflow-tooltip />
+          <el-table-column label="浜у搧鍚嶇О" prop="productCategory" show-overflow-tooltip />
+          <el-table-column label="浜у搧楂樺害" prop="specificationModel" width="100" show-overflow-tooltip>
+            <template #default="scope">
+              <div>{{ scope.row.specificationModel }}{{ scope.row.unit }}</div>
+            </template>
+          </el-table-column>
+          <el-table-column label="鍏ュ簱鏁伴噺/浠�" prop="inboundNum" width="100" show-overflow-tooltip />
+          <el-table-column label="姣忎欢鏁伴噺/鏀�" prop="boxNum" width="100" show-overflow-tooltip />
+          <el-table-column label="鍗曚环(鍏�)/浠�" prop="taxInclusiveUnitPrice" width="150"></el-table-column>
+          <el-table-column label="鍗曚环(缇庡厓)/浠�" prop="dollarPrice" width="150"></el-table-column>
+          <el-table-column label="绾哥瑙勬牸" prop="cartonSpecifications" width="150"></el-table-column>
+          <el-table-column label="鍏ュ簱浜�" prop="createBy" width="80" show-overflow-tooltip />
            <el-table-column fixed="right" label="鎿嶄綔" min-width="60" align="center">
              <template #default="scope">
                <el-button link type="primary" size="small" @click="openForm('edit', scope.row, 'purchase');">缂栬緫</el-button>
-                <el-button link type="success" size="small" @click="showQRCode(scope.row)">鐢熸垚鏉″舰鐮�</el-button>
-                <el-button link type="success" size="small" @click="showERCode(scope.row)">鐢熸垚浜岀淮鐮�</el-button>
+                <!-- <el-button link type="success" size="small" @click="showQRCode(scope.row,1)">鐢熸垚鏉″舰鐮�</el-button>
+                <el-button link type="success" size="small" @click="showERCode(scope.row,1)">鐢熸垚浜岀淮鐮�</el-button> -->
              </template>
            </el-table-column>
          </el-table>
@@ -130,12 +61,9 @@
        </div>
      </el-tab-pane>
       
-      <el-tab-pane label="鏉愭枡鍏ュ簱" name="manual">
+      <el-tab-pane label="鎴愬搧鍏ュ簱" name="manual">
         <div class="search_form">
           <div>
-<!--            <span class="search_title">渚涘簲鍟嗗悕绉帮細</span>-->
-<!--            <el-input v-model="searchForm.supplierName" style="width: 240px" placeholder="璇疯緭鍏�" @change="handleQuery"-->
-<!--              clearable prefix-icon="Search" />-->
             <span class="search_title ml10">鍏ュ簱鏃ユ湡锛�</span>
             <el-date-picker
               v-model="searchForm.timeStr"
@@ -167,27 +95,29 @@
             :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)">
             <el-table-column align="center" type="selection" width="55" />
             <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+            <el-table-column label="浜у搧鍥剧墖" width="100" align="center">
+              <template #default="scope">
+                <img class="barcode-img" :src="javaApiUrl+scope.row.url"></img>
+              </template>
+            </el-table-column>
             <el-table-column label="鍏ュ簱鏃堕棿" prop="inboundDate" width="100" show-overflow-tooltip />
-            <!-- <el-table-column label="鍏ュ簱鎵规" prop="inboundBatches" show-overflow-tooltip /> -->
-<!--             <el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" width="240" show-overflow-tooltip />-->
-            <el-table-column label="浜у搧澶х被" prop="productCategory" show-overflow-tooltip />
-            <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" show-overflow-tooltip />
-            <el-table-column label="鍗曚綅" prop="unit" width="70" show-overflow-tooltip />
-            <el-table-column label="鐗╁搧绫诲瀷" prop="itemType" show-overflow-tooltip />
-						<el-table-column label="鍏ュ簱鏁伴噺" prop="inboundNum" width="100" show-overflow-tooltip />
-<!--						<el-table-column label="鍓╀綑搴撳瓨" prop="inboundNum0" show-overflow-tooltip />-->
-<!--						<el-table-column label="鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" width="150"></el-table-column>-->
-<!--						<el-table-column label="鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" width="150"></el-table-column>-->
-<!--            <el-table-column label="鍚◣鍗曚环" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />-->
-<!--            <el-table-column label="鍚◣鎬讳环" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />-->
-<!--            <el-table-column label="绋庣巼(%)" prop="taxRate" width="80" show-overflow-tooltip />-->
-<!--            <el-table-column label="涓嶅惈绋庢�讳环" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />-->
-            <el-table-column label="鍏ュ簱浜�" prop="createBy" width="80" show-overflow-tooltip />
+            <el-table-column label="浜у搧鍚嶇О" prop="productCategory" show-overflow-tooltip />
+            <el-table-column label="浜у搧楂樺害" prop="specificationModel" width="100" show-overflow-tooltip>
+              <template #default="scope">
+                <div>{{ scope.row.specificationModel }}{{ scope.row.unit }}</div>
+              </template>
+            </el-table-column>
+						<el-table-column label="鍏ュ簱鏁伴噺/浠�" prop="inboundNum" width="100" show-overflow-tooltip />
+						<el-table-column label="姣忎欢鏁伴噺/鏀�" prop="boxNum" width="100" show-overflow-tooltip />
+						<el-table-column label="鍗曚环(鍏�)/浠�" prop="taxInclusiveUnitPrice" width="150"></el-table-column>
+						<el-table-column label="鍗曚环(缇庡厓)/浠�" prop="dollarPrice" width="150"></el-table-column>
+						<el-table-column label="绾哥瑙勬牸" prop="cartonSpecifications" width="150"></el-table-column>
+            <el-table-column label="鍏ュ簱浜�" prop="createBy" width="150" show-overflow-tooltip />
             <el-table-column fixed="right" label="鎿嶄綔" width="100" align="center">
               <template #default="scope">
                 <el-button link type="primary" size="small" @click="openForm('edit', scope.row, 'manual');">缂栬緫</el-button>
-                <el-button link type="success" size="small" @click="showQRCode(scope.row)">鐢熸垚鏉″舰鐮�</el-button>
-                <el-button link type="success" size="small" @click="showERCode(scope.row)">鐢熸垚浜岀淮鐮�</el-button>
+                <el-button link type="success" size="small" @click="showQRCode(scope.row,2)">鐢熸垚鏉″舰鐮�</el-button>
+                <el-button link type="success" size="small" @click="showERCode(scope.row,2)">鐢熸垚浜岀淮鐮�</el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -228,6 +158,80 @@
         </div>
       </div>
     </el-dialog>
+    <el-dialog v-model="barcodeDia" title="浜у搧淇℃伅" width="40%" @close="closeBarcodeDia">
+      <div>
+        <el-row v-if="barcodeDetail.url" :gutter="30">
+          <el-col :span="12">
+            <div class="barcode-item">
+              <div class="barcode-label">鍥剧墖</div>
+              <img class="barcode-img" :src="javaApiUrl+barcodeDetail.url"></img>
+            </div>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <div class="barcode-item">
+              <div class="barcode-label">鍚嶇О</div>
+              <div class="barcode-value">{{barcodeDetail.productCategory}}</div>
+            </div>
+          </el-col>
+          <el-col :span="12">
+            <div class="barcode-item">
+              <div class="barcode-label">浜у搧楂樺害</div>
+              <div class="barcode-value">{{barcodeDetail.specificationModel}}{{barcodeDetail.unit}}</div>
+            </div>
+          </el-col>
+          
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <div class="barcode-item">
+              <div class="barcode-label">鍗曚环</div>
+              <div class="barcode-value">{{barcodeDetail.taxInclusiveUnitPrice}}鍏�/浠�</div>
+            </div>
+          </el-col>
+          <el-col :span="12">
+            <div class="barcode-item">
+              <div class="barcode-label">鍗曚环</div>
+              <div class="barcode-value">{{barcodeDetail.dollarPrice}}缇庡厓/浠�</div>
+            </div>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <div class="barcode-item">
+              <div class="barcode-label">鏁伴噺/浠�</div>
+              <div class="barcode-value">{{barcodeDetail.inboundNum}}</div>
+            </div>
+          </el-col>
+          <el-col :span="12">
+            <div class="barcode-item">
+              <div class="barcode-label">姣忎欢鏁伴噺/鏀�</div>
+              <div class="barcode-value">{{barcodeDetail.boxNum}}</div>
+            </div>
+          </el-col>
+        </el-row>
+         <el-row :gutter="30">
+          <el-col :span="12">
+            <div class="barcode-item">
+              <div class="barcode-label">绾哥瑙勬牸</div>
+              <div class="barcode-value">{{barcodeDetail.cartonSpecifications}}</div>
+            </div>
+          </el-col>
+          <el-col :span="12">
+            <div class="barcode-item">
+              <div class="barcode-label">鍏ュ簱浜�</div>
+              <div class="barcode-value">{{barcodeDetail.createBy}}</div>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="closeBarcodeDia">鍏抽棴</el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -237,11 +241,13 @@
 import { ElMessageBox } from "element-plus";
 import useUserStore from '@/store/modules/user'
 import dayjs from 'dayjs'
+const javaApiUrl = __BASE_API__;
 import {
 	getStockInPage,
 	getStockInPageByProduction,
 	delStockIn,
 	delStockInCustom, getInPageByCustom,
+  stockinDetail,detailManagementByCustom
 } from "@/api/inventoryManagement/stockIn.js";
 import FormDia from './components/formDia.vue'
 import FormDiaManual from './components/formDiaManual.vue'
@@ -262,7 +268,7 @@
 const formDia = ref()
 const formDiaManual = ref()
 const formDiaProduct = ref()
-const activeTab = ref('production') // 褰撳墠婵�娲荤殑 tab
+const activeTab = ref('purchase') // 褰撳墠婵�娲荤殑 tab
 
 const page = reactive({
   current: 1,
@@ -346,13 +352,14 @@
   // 鍒囨崲 tab 鏃舵竻绌烘悳绱㈡潯浠�
   searchForm.value.supplierName = ''
   searchForm.value.customerName = ''
-  searchForm.value.timeStr = ''
+  searchForm.value.timeStr = getCurrentDate() // 閲嶇疆涓哄綋鍓嶆棩鏈�
   searchForm.value.productCategory = ''
   getList()
 }
 
 // 鎵撳紑寮规
 const openForm = async (type, row, tabType) => {
+  if(barcodeDia.value)return
   const currentTab = tabType || activeTab.value
   await nextTick(() => {
     if (currentTab === 'manual') {
@@ -424,7 +431,7 @@
     } else {
       // 鏉愭枡鍏ュ簱
       deleteApi = delStockInCustom
-      deleteParams = { ids }
+      deleteParams = [...ids]
     }
     
     deleteApi(deleteParams).then(() => {
@@ -442,15 +449,17 @@
 // 浜岀淮鐮佺浉鍏冲彉閲�
 const qrCodeDialogVisible = ref(false);
 const qrCodeUrl = ref("");
-const showQRCode = async (row) => {
+const showQRCode = async (row,type) => {
+  if(barcodeDia.value)return
   try {
     // 鏋勫缓浜岀淮鐮佸唴瀹癸紝鍙寘鍚噰璐悎鍚屽彿锛堢函鏂囨湰锛�
-    const qrContent = row.id || '';
+    let qrContent = row.id || '';
     // 妫�鏌ュ唴瀹规槸鍚︿负绌�
     if (!qrContent) {
       proxy.$modal.msgWarning("璇ヨ鍟嗗搧id锛屾棤娉曠敓鎴愭潯褰㈢爜");
       return;
     }
+    qrContent+=`,${type}`
     qrCodeDialogVisible.value = true;
     await nextTick();
     JsBarcode("#barcode", qrContent+'', {
@@ -466,13 +475,15 @@
 
 const erCodeDialogVisible = ref(false);
 const erCodeUrl = ref("");
-const showERCode = async (row) => {
-  const qrContent = row.id || '';
+const showERCode = async (row,type) => {
+  if(barcodeDia.value)return
+  let qrContent = row.id || '';
     // 妫�鏌ュ唴瀹规槸鍚︿负绌�
   if (!qrContent) {
     proxy.$modal.msgWarning("璇ヨ鍟嗗搧id锛屾棤娉曠敓鎴愪簩缁寸爜");
     return;
   }
+  qrContent+=`,${type}`
   try {
     erCodeUrl.value = await QRCode.toDataURL(qrContent+'', {
       width: 200,
@@ -519,12 +530,88 @@
   proxy.$modal.msgSuccess("涓嬭浇鎴愬姛");
 };
 
+//鎵爜鐩稿叧鍙傛暟
+const barcodeDia = ref(false);
+const scanBarcodeInput = ref('');
+const barcodeDetail = ref({})
+// 鎵爜鍑芥暟
+function scanBarcode (e){
+  if(!e||!e.target||!e.target.tagName){
+    return;
+  }
+  if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') {
+    return
+  }
+  if (e.key === 'Enter') {
+    let _value = scanBarcodeInput.value
+    getDetail(_value)
+    scanBarcodeInput.value = ""
+  } else {
+    scanBarcodeInput.value += e.key
+  }
+}
+const getDetail = (barcode)=>{
+  if(barcode.indexOf(",")==-1){
+    proxy.$modal.msgWarning("璇锋壂鎻忔纭殑鏉″舰鐮�")
+    return
+  }
+  let barcodeList = barcode.split(",")
+  let barcodeId = barcodeList[0]
+  let type = barcodeList[1]
+  let detailApi = null
+  if(type==1){
+    detailApi = stockinDetail
+  }else if(type==2){
+    detailApi = detailManagementByCustom
+  }
+  
+  if(!detailApi){
+    proxy.$modal.msgWarning("璇锋壂鎻忔纭殑鏉″舰鐮�")
+    return
+  }
+  detailApi({id:barcodeId}).then((resp) => {
+    if(!resp.data){
+      proxy.$modal.msgError("鍟嗗搧涓嶅瓨鍦�")
+      return
+    }
+    if(resp.code!=200){
+      proxy.$modal.msgError(res.msg)
+      return
+    }
+    barcodeDetail.value = resp.data
+    barcodeDia.value = true
+  }).catch(() => {
+    proxy.$modal.msgError("鏌ョ湅璇︽儏澶辫触")
+  })
+  
+}
+
+const closeBarcodeDia = () => {
+  barcodeDia.value = false
+}
+
 onMounted(() => {
+  // 娣诲姞鎵爜鏋洃鍚簨浠�
+  document.removeEventListener('keypress',scanBarcode)
+  document.addEventListener('keypress', scanBarcode)
   getList()
 })
 </script>
 
-<style scoped lang="scss"></style>
+<style scoped lang="scss">
+.barcode-item{
+  display: flex;
+  justify-content: space-between;
+  padding: 5px 0;
+  
+}
+.barcode-img{
+  width: 80px;
+  height: 80px;
+  border-radius: 5px;
+  background-color: #F5F5F5;
+}
+</style>
 
 
 

--
Gitblit v1.9.3