From 7e460156de73171f9660ce48f80703e79f8b478d Mon Sep 17 00:00:00 2001
From: Crunchy <3114200645@qq.com>
Date: 星期六, 14 六月 2025 11:48:26 +0800
Subject: [PATCH] 初始化提交

---
 src/views/out_operation/index.vue |  816 ++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 656 insertions(+), 160 deletions(-)

diff --git a/src/views/out_operation/index.vue b/src/views/out_operation/index.vue
index f13290b..0a66a7f 100644
--- a/src/views/out_operation/index.vue
+++ b/src/views/out_operation/index.vue
@@ -1,90 +1,285 @@
 <template>
-  <div class="addOperation">
-    <div class="addOperation-main">
-      <!-- <el-form v-model="statusType" ref="queryForm" size="small" :inline="true" label-width="68px">
-            <el-form-item label="鍏ュ簱鐘舵��">
-           <el-radio-group v-model="inStatus">
-            <el-radio-button label="鍏ㄩ儴"></el-radio-button>
-            <el-radio-button label="宸插叆搴�"></el-radio-button>
-            <el-radio-button label="宸插嚭搴�"></el-radio-button>
-          </el-radio-group>
-            </el-form-item>
-            <el-form-item label="鍏ュ簱绫诲瀷" prop="phonenumber">
-             <el-radio-group v-model="inType">
-            <el-radio-button label="鏉$爜鎵撳嵃"></el-radio-button>
-          </el-radio-group>
-          </el-form-item>
-          <el-form-item label="鏉$爜鎵撳嵃">
-            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鏂板鏉$爜鎵撳嵃</el-button>
-          </el-form-item>
-      </el-form> -->
-     <el-row type="flex" align="middle" class="main-top">
-      <el-col :span="2"><el-button type="primary">鎵弿鍑哄簱</el-button></el-col>
-      <el-col :span="20">
-        <TableSearch></TableSearch>
-      </el-col>
-      <el-col :span="2"><el-button>鎶艰繍鍗曟墦鍗�</el-button></el-col>
-     </el-row>
-    <el-table
-      :stripe="true"
-      :data="tableData"
-      :cell-style="{ textAlign: 'center' }"
-      :header-cell-style="{ textAlign: 'center' }"
-      :border="true"
-      header-row-class-name="table-header"
-    >
-      <el-table-column
-        prop="date"
-        label="搴忓彿">
-      </el-table-column>
-      <el-table-column
-        prop="name"
-        label="浜у搧缂栫爜">
-      </el-table-column>
-      <el-table-column
-        prop="address"
-        label="浜у搧鍚嶇О">
-      </el-table-column>
-      <el-table-column
-        prop="date"
-        label="瑙勬牸鍨嬪彿">
-      </el-table-column>
-      <el-table-column
-        prop="date"
-        label="鍗曚綅">
-      </el-table-column>
-      <el-table-column
-        prop="date"
-        label="鍏ュ簱鏁伴噺">
-      </el-table-column>
-      <el-table-column
-        prop="date"
-        label="鍏ュ簱浜�">
-      </el-table-column>
-      <el-table-column
-        prop="date"
-        label="鍏ュ簱鏃ユ湡">
-      </el-table-column>
-    </el-table>
-    </div>
-    <div class="addOperation-foot">
-      <el-pagination
-      :current-page="searchModel.pageNo"
-      :page-sizes="[10, 15, 20, 25]"
-      :page-size="searchModel.pageSize"
-      layout="->, total, sizes, prev, pager, next, jumper"
-      :total="total"
-      @size-change="handleSizeChange"
-      @current-change="handleCurrentChange"
+  <div class="outOperation">
+    <div class="outOperation-main">
+      <el-row type="flex" align="middle" class="main-top">
+        <el-col :span="2"><el-button type="primary" icon="iconfont icon-saoyisao" @click="scan">鏂板鍑哄簱</el-button></el-col>
+        <el-col :span="20">
+          <TableSearch :show="true" :excel-name="'搴撳瓨琛�'" :file="outFile" :get-list="getList" :search-data="searchData" :search-params="searchModel" :options="options" />
+        </el-col>
+        <!-- <el-col :span="2"><el-button type="primary" @click="printOrder ">鎵撳嵃鎶艰繍鍗�</el-button></el-col> -->
+        <el-col :span="2"><el-button type="primary" :disabled="outTable.length==0" @click="printOrder ">鎵撳嵃鎶艰繍鍗�</el-button></el-col>
+      </el-row>
+      <el-table
+        class="tableData"
+        :row-class-name="onTableRowClassName"
+        :row-style="{height:0+'px'}"
+        :cell-style="{padding:8+'px',textAlign: 'center'}"
+        :header-cell-style="{borderRight:'0px',textAlign: 'center',background:'#52626F',color:'#fff', height:'10px', padding:'0px'}"
+        :stripe="true"
+        :data="tableData"
+        :border="true"
+        header-row-class-name="table-header"
+        @selection-change="handleSelectionChange"
       >
-    </el-pagination>
+        <el-table-column
+          label="澶氶��"
+          type="selection"
+          width="55"
+        >
+        <!-- <el-checkbox></el-checkbox> -->
+        </el-table-column>
+        <el-table-column
+          prop="productCode"
+          label="浜у搧缂栫爜"
+        />
+        <el-table-column
+          prop="productName"
+          label="浜у搧鍚嶇О"
+        />
+        <el-table-column
+          prop="productModel"
+          label="瑙勬牸鍨嬪彿"
+        >
+          <template slot="header" slot-scope="scope">
+            <span>瑙勬牸鍨嬪彿</span>
+            <span :class="isMerge?'el-icon-sort-up':'el-icon-sort-down'" :style="{marginLeft:'5px'}" @click="merge" />
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="unit"
+          label="鍗曚綅"
+        />
+        <el-table-column
+          prop="incomingQuantity"
+          label="鍏ュ簱鏁伴噺"
+        />
+        <el-table-column
+          prop="addPerson"
+          label="鍏ュ簱浜�"
+        />
+        <el-table-column
+          v-if="!isMerge"
+          prop="createTime"
+          label="鍑哄簱鏃ユ湡"
+        />
+      </el-table>
+      <div class="outOperation-foot">
+        <el-pagination
+          :current-page="searchModel.pageNo"
+          :page-sizes="[10, 15, 20, 25]"
+          :page-size="searchModel.pageSize"
+          layout="->, total, sizes, prev, pager, next, jumper"
+          :total="total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
     </div>
+
+    <el-dialog title="鎵弿鍑哄簱" :visible.sync="outFormVisible">
+      <el-form :model="outParams" label-position="left">
+        <el-table
+          :height="250"
+          :max-height="250"
+          :row-class-name="onTableRowClassName"
+          :row-style="{height:0+'px'}"
+          :cell-style="{padding:8+'px',textAlign: 'center'}"
+          :header-cell-style="{borderRight:'0px',textAlign: 'center',background:'#52626F',color:'#fff', height:'10px', padding:'0px'}"
+          :stripe="true"
+          :border="true"
+          header-row-class-name="table-header"
+          :data="this.outTable.slice(0,outPageParams.length)"
+        >
+          <el-table-column property="addPerson" label="搴忓彿" />
+          <el-table-column property="productCode" label="浜у搧缂栫爜" />
+          <el-table-column property="productNameId" label="浜у搧鍚嶇О" />
+          <el-table-column property="productModelId" label="瑙勬牸鍨嬪彿" />
+          <el-table-column property="unit" label="鍗曚綅" />
+          <el-table-column property="incomingQuantity" label="鍏ュ簱鏁伴噺" />
+          <el-table-column property="addPerson" label="鍏ュ簱浜�" />
+          <!-- <el-table-column property="address" label="鍏ュ簱鏃ユ湡"></el-table-column> -->
+        </el-table>
+        <div :style="{display: 'flex',justifyContent:'center',marginTop: '10px'}">
+          <el-pagination
+            :current-page="outPageParams.pageNo"
+            :page-sizes="[3, 4, 5, 6]"
+            :page-size="outPageParams.pageSize"
+            layout="->, total, sizes, prev, pager, next, jumper"
+            :total="outTable.length"
+            @size-change="outHandleSizeChange"
+            @current-change="outHandleCurrentChange"
+          />
+        </div>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="orderFormVisible = true">鐢熸垚鎶艰繍鍗�</el-button>
+        <el-button @click="outFormVisible = false">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog title="鎶艰繍鍗曟墦鍗�" :visible.sync="orderFormVisible" @close="orderFormClose">
+      <div id="order">
+        <el-form label-position="right" :model="orderParams">
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="璁㈠崟鍙�:" :label-width="formLabelWidth">
+                <el-input v-model="orderParams.orderNumber" autocomplete="off" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="鎶艰繍鍗曠紪鍙�:" :label-width="formLabelWidth">
+                <el-input v-model="orderParams.escortNoteNumber" autocomplete="off" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="瀹㈡埛璁㈠崟鍙�:" :label-width="formLabelWidth">
+                <el-input v-model="orderParams.customerOrderNumber" autocomplete="off" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="鍙戣揣鏃ユ湡:" :label-width="formLabelWidth">
+                <el-date-picker
+                  v-model="orderParams.createTime"
+                  format="yyyy-MM-dd HH:mm"
+                  type="datetime"
+                  placeholder="閫夋嫨鏃ユ湡鏃堕棿"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="瀹㈡埛鍚嶇О:" :label-width="formLabelWidth">
+                <el-input v-model="orderParams.customerName" autocomplete="off" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="鍙戣揣浜�:" :label-width="formLabelWidth">
+                <el-input v-model="orderParams.consignor" autocomplete="off" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col>
+              <el-form-item label="鍒拌揣鍦板潃:" :label-width="formLabelWidth">
+                <el-input v-model="orderParams.arrivalAddress" autocomplete="off" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col>
+              <el-form-item label="鏀惰揣鑱旂郴浜�:" :label-width="formLabelWidth">
+                <el-input v-model="orderParams.receivingContact" autocomplete="off" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col>
+              <el-form-item label="鎵嬫満鍙�:" :label-width="formLabelWidth">
+                <el-input v-model="orderParams.cellPhoneNumber" autocomplete="off" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col>
+
+              <el-form-item>
+                <el-table
+                  :row-class-name="onTableRowClassName"
+                  :row-style="{height:0+'px'}"
+                  :cell-style="{padding:8+'px',textAlign: 'center'}"
+                  :header-cell-style="{borderRight:'0px',textAlign: 'center',background:'#52626F',color:'#fff', height:'10px', padding:'0px'}"
+                  :stripe="true"
+                  :border="true"
+                  :data="outTable"
+                >
+                  <el-table-column property="productName" label="浜у搧鍚嶇О" />
+                  <el-table-column property="productModel" label="瑙勬牸鍨嬪彿" />
+                  <el-table-column property="unit" label="鍗曚綅" />
+                  <el-table-column property="incomingQuantity" label="鍙戝簱鏁伴噺" />
+                </el-table>
+              </el-form-item>
+
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="goToPrint">鎵� 鍗�</el-button>
+        <el-button @click="orderFormVisible = false">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog title="鎶艰繍鍗曟墦鍗�" :visible.sync="templateOrderVisible" @close="templateOrderClose">
+      <div id="templateOrder" class="templateOrder">
+        <h3>鎶艰繍鍗�</h3>
+        <div class="templateOrder-main">
+          <div class="main-row">
+            <div class="flex-2">璁㈠崟鍙凤細</div>
+            <div class="flex-8">{{ orderParams.orderNumber }}</div>
+            <div class="flex-2">鎶艰繍鍗曠紪鍙凤細</div>
+            <div class="flex-8">{{ orderParams.escortNoteNumber }}</div>
+          </div>
+          <div class="main-row">
+            <div class="flex-2">瀹㈡埛璁㈠崟鍙凤細</div>
+            <div class="flex-8">{{ orderParams.customerOrderNumber }}</div>
+            <div class="flex-2">鍙戣揣鏃ユ湡锛�</div>
+            <div class="flex-8">{{ orderParams.createTime }}</div>
+          </div>
+          <div class="main-row">
+            <div class="flex-2">瀹㈡埛鍚嶇О锛�</div>
+            <div class="flex-8">{{ orderParams.customerName }}</div>
+            <div class="flex-2">鍙戣揣浜猴細</div>
+            <div class="flex-8">{{ orderParams.consignor }}</div>
+          </div>
+          <div class="main-row">
+            <div class="flex-2">鍒拌揣鍦板潃锛�</div>
+            <div class="flex-18">{{ orderParams.arrivalAddress }}</div>
+          </div>
+          <div class="main-row">
+            <div class="flex-2">鏀惰揣鑱旂郴浜猴細</div>
+            <div class="flex-18">{{ orderParams.receivingContact }}</div>
+          </div>
+          <div class="main-row">
+            <div class="flex-2">鎵嬫満鍙凤細</div>
+            <div class="flex-18">{{ orderParams.cellPhoneNumber }}</div>
+          </div>
+          <div class="main-row">
+            <!-- <div class="flex-2">鎵嬫満鍙�</div> -->
+            <div class="flex-18" :style="{'textAlign': 'center'}">
+              <h4>浜у搧鍒楄〃</h4>
+            </div>
+          </div>
+          <div class="main-row">
+            <div class="flex-4">浜у搧鍚嶇О</div>
+            <div class="flex-4">瑙勬牸鍨嬪彿</div>
+            <div class="flex-4">鍗曚綅</div>
+            <div class="flex-4">鍙戣揣鏁伴噺</div>
+          </div>
+          <div v-for="item in outTable" :key="item.id" class="main-row">
+            <div class="flex-4">{{ item.productName }}</div>
+            <div class="flex-4">{{ item.productModel }}</div>
+            <div class="flex-4">{{ item.unit }}</div>
+            <div class="flex-4">{{ item.incomingQuantity }}</div>
+          </div>
+        </div>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button v-print="printObj" type="primary">鎸夋ā鏉挎墦鍗�</el-button>
+        <el-button @click="templateOrderVisible = false">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+
   </div>
 </template>
 
 <script>
-import { getList } from '@/api/table'
+import { getList, selectCacheOfIn, outOperation, outFile } from '@/api/addOperation'
+import { selectAllName } from '@/api/productName'
+import { selectAllModel } from '@/api/productModel'
 import TableSearch from '@/components/TableSearch'
+import { mapGetters } from 'vuex'
 export default {
   filters: {
     statusFilter(status) {
@@ -96,88 +291,302 @@
       return statusMap[status]
     }
   },
-  data() {
-    return {
-      pickerOptions: {
-          shortcuts: [{
-            text: '鏈�杩戜竴鍛�',
-            onClick(picker) {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
-              picker.$emit('pick', [start, end]);
-            }
-          }, {
-            text: '鏈�杩戜竴涓湀',
-            onClick(picker) {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
-              picker.$emit('pick', [start, end]);
-            }
-          }, {
-            text: '鏈�杩戜笁涓湀',
-            onClick(picker) {
-              const end = new Date();
-              const start = new Date();
-              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
-              picker.$emit('pick', [start, end]);
-            }
-          }]
-        },
-      inType: '',
-      inStatus: '',
-      deptName: '',
-      statusType: {},
-      queryParams: {
-        encode: '',
-        type: '',
-        depositor: ''
-      },
-      total: 0,
-      searchModel: {
-        pageNo: 1,
-        pageSize: 10
-      },
-      tableData: [{
-        date: '2016-05-02',
-        name: '鐜嬪皬铏�',
-        address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�'
-      }, {
-        date: '2016-05-04',
-        name: '鐜嬪皬铏�',
-        address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1517 寮�'
-      }, {
-        date: '2016-05-01',
-        name: '鐜嬪皬铏�',
-        address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�'
-      }, {
-        date: '2016-05-03',
-        name: '鐜嬪皬铏�',
-        address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�'
-      }, {
-        date: '2016-05-03',
-        name: '鐜嬪皬铏�',
-        address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�'
-      }, {
-        date: '2016-05-03',
-        name: '鐜嬪皬铏�',
-        address: '涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�'
-      }]
-    }
-  },
-  created() {
-    this.fetchData()
-  },
   components: {
     TableSearch
   },
+  data() {
+    return {
+      templateOrderVisible: false,
+      outFile,
+      printObj: {
+        id: 'templateOrder', // 鎵撳嵃鐨勫尯鍩�
+        // preview: true, // 棰勮宸ュ叿鏄惁鍚敤
+        previewTitle: '鎵撳嵃鎶艰繍鍗�', // 棰勮椤甸潰鐨勬爣棰�
+        previewBeforeOpenCallback(vue) {
+          console.log('姝e湪鍔犺浇棰勮绐楀彛')
+        },
+        previewOpenCallback(vue) {
+          console.log('宸茬粡鍔犺浇瀹岄瑙堢獥鍙�')
+        },
+        clickMounted: (vue) => {
+          console.log('瑙﹀彂鐐瑰嚮鎵撳嵃鍥炶皟')
+          vue.isShowPrint = true // 寮规鏄剧ず鏉$爜
+        },
+        beforeOpenCallback(vue) {
+          console.log('鎵撳紑涔嬪墠', vue.barcodeNum)
+        },
+        openCallback(vue) {
+          //  let time =vue.orderParams.createTime
+          // vue.orderParams.createTime =  `${time.getFullYear()}-${time.getMonth() + 1}-${time.getDate()} ${time.getHours()}:${time.getMinutes()}`
+          // vue.orderParams.listId = vue.outCodeTable
+          // vue.orderParams.outPerson = vue.name
+          // outOperation(vue.orderParams).then((res) => {
+          //   vue.$message.success("鎴愬姛鍑哄簱")
+          //   vue.isShowPrint = false  // 鍏抽棴鏉$爜鏄剧ず寮规
+          // })
+          console.log('鎵ц浜嗘墦鍗�', vue.barcodeNum)
+        },
+        clickMounted(vue) {
+          console.log(1111)
+          console.log(vue.orderParams.createTime)
+          outOperation({ ...vue.orderParams, outPerson: vue.name, listCode: vue.outCodeTable }).then((res) => {
+            vue.orderFormVisible = false
+            vue.outCodeTable = []
+            vue.outTable = []
+            vue.tableData = []
+            vue.fetchData()
+            console.log('娓呯┖鏁版嵁锛屽悓鏃跺埛鏂版暟鎹�')
+            vue.$message.success('鎴愬姛鍑哄簱')
+            vue.fetchData()
+            vue.isShowPrint = false // 鍏抽棴鏉$爜鏄剧ず寮规
+          }, () => {
+            vue.$message.err('璇烽噸鏂版墦鍗�')
+          }).finally(() => {
+            vue.templateOrderVisible = false
+            vue.orderParams = {}
+          })
+
+          console.log('鎵ц浜嗘墦鍗�', vue.barcodeNum)
+        }
+      },
+      outPageParams: {
+        pageNo: 1,
+        pageSize: 3
+      },
+      isMerge: false,
+      outTable: [],
+      outCodeTable: [],
+      outParams: {},
+      outFormVisible: false,
+      getList,
+      total: 0,
+      options: [],
+      searchModel: {
+        pageNo: 1,
+        pageSize: 10,
+        productModel: '',
+        endTime: '',
+        startTime: ''
+      },
+      formLabelWidth: '120px',
+      orderFormVisible: false,
+      orderParams: {
+        orderNumber: '',
+        escortNoteNumber: '',
+        customerOrderNumber: '',
+        createTime: '',
+        customerName: '',
+        consignor: '',
+        arrivalAddress: '',
+        receivingContact: '',
+        cellPhoneNumber: ''
+      },
+      total: 0,
+      tableData: [],
+      contentTable: [],
+      isScan: false
+    }
+  },
+  watch: {
+    isScan(to) {
+
+    }
+  },
+  created() {
+    
+    this.fetchData()
+    this.setOptions()
+  },
+  beforeDestroy() {
+    window.document.onkeypress = null
+  },
   methods: {
+    templateOrderClose() {
+      this.orderFormClose()
+    },
+    orderFormClose() {
+      // 鍏抽棴鎵撳嵃鎶艰繍鍗曡緭鍏ュ脊绐楁竻绌烘暟鎹�
+      for (const key in this.orderParams) {
+        this.orderParams[key] = ''
+      }
+      // this.outTable = []
+    },
+    goToPrint() {
+      let ok = false
+      for (const key in this.orderParams) {
+        if (!this.orderParams[key]) {
+          ok = true
+        }
+      }
+      if (ok) {
+        return this.$message.error('璇峰~鍐欏畬鏁村弬鏁�')
+      }
+
+      console.log('闇�瑕佹墦鍗扮殑鍙傛暟', this.orderParams)
+      const time = this.orderParams.createTime
+      this.orderParams.createTime = `${time.getFullYear()}-${time.getMonth() + 1 < 10 ? '0' + (time.getMonth() + 1) : time.getMonth() + 1}-${time.getDate() < 10 ? '0' + time.getDate() : time.getDate()} ${time.getHours() < 10 ? '0' + time.getHours() : time.getHours()}:${time.getMinutes() < 10 ? '0' + time.getMinutes() : time.getMinutes()}`
+      console.log('闇�瑕佹墦鍗扮殑涓滆タ==>', this.outTable)
+      // this.orderFormVisible = false
+      this.templateOrderVisible = true
+    },
+    merge() {
+      this.isMerge = !this.isMerge
+      if (this.isMerge) {
+        this.contentTable = JSON.parse(JSON.stringify(this.tableData))
+      } else {
+        this.tableData = JSON.parse(JSON.stringify(this.contentTable))
+        return
+      }
+
+      this.tableData = this.tableData.reduce((arr, next) => {
+        for (const item of arr) {
+          if (item.productModel === next.productModel) {
+            item.children.push(next.id)
+            item.incomingQuantity = item.incomingQuantity + next.incomingQuantity
+            return arr
+          }
+        }
+        next.children = [next.id]
+        arr.push(next)
+        return arr
+        // arr.push(next)
+      }, [])
+      console.log(this.tableData)
+    },
+    printOrder() {
+      console.log(this.outCodeTable, this.outTable)
+      this.orderFormVisible = true
+    },
+    addScanMonitor() {
+      window.document.onkeypress = e => {
+        console.log(e)
+        if (window.event) { // IE
+          this.nextCode = e.keyCode
+        } else if (e.which) { // Netscape/Firefox/Opera
+          this.nextCode = e.which
+        }
+
+        if (e.which === 13) { // 閿洏鍥炶溅浜嬩欢
+          // if (this.code.length < 3) return // 鎵爜鏋殑閫熷害寰堝揩锛屾墜鍔ㄨ緭鍏ョ殑鏃堕棿涓嶄細璁ヽode鐨勯暱搴﹀ぇ浜�2锛屾墍浠ヨ繖閲屼笉浼氬鎵爜鏋湁鏁�
+          console.log(new Date().getTime())
+          if (new Date().getTime() - this.lastTime > 30) {
+            return this.$message.error('鎵爜鏃朵笉鍙�氳繃閿洏杈撳叆')
+          }
+          // if (this.code.length < 3) return // 鎵爜鏋殑閫熷害寰堝揩锛屾墜鍔ㄨ緭鍏ョ殑鏃堕棿涓嶄細璁ヽode鐨勯暱搴﹀ぇ浜�2锛屾墍浠ヨ繖閲屼笉浼氬鎵爜鏋湁鏁�
+          console.log('鎵爜缁撴潫,鏉″舰鐮侊細', this.code)
+          for (const item of this.tableData) {
+            if (item.id == this.code) {
+              this.$message.error('璇峰嬁閲嶅鎵弿')
+              this.handleSubmitScanning()
+              return
+            }
+          }
+          // 鍙戦�佽姹�
+          selectCacheOfIn({ code: this.code }).then(res => {
+            this.$message.success(`${this.code}鎵弿鎴愬姛`)
+            const { data } = res
+            if (data) this.tableData.push(data)
+          })
+          this.scanningForm.scanCode = this.code
+          this.lastCode = ''
+          this.lastTime = ''
+          this.handleSubmitScanning()
+          return
+        }
+
+        this.nextTime = new Date().getTime()
+        if (!this.lastTime && !this.lastCode) {
+          this.code = '' // 娓呯┖涓婃鐨勬潯褰㈢爜
+          // 缁х画鎵弿涓�涓嬫潯鍓嶅叧闂脊绐�
+          // this.handleCloseTipsVisible()
+          this.code = this.code + '' + e.key
+          console.log('鎵爜寮�濮�---', this.code)
+        }
+        if (this.lastCode && this.lastTime && this.nextTime - this.lastTime > 500) { // 褰撴壂鐮佸墠鏈塳eypress浜嬩欢鏃�,闃叉棣栧瓧缂哄け
+          this.code = e.key
+          console.log('闃叉棣栧瓧缂哄け銆傘�傘��', this.code)
+        } else if (this.lastCode && this.lastTime) {
+          this.code = this.code + '' + e.key
+          console.log('鎵爜涓�傘�傘��', this.code)
+        }
+        this.lastCode = this.nextCode
+        this.lastTime = this.nextTime
+      }
+    },
+    handleSelectionChange(val) {
+      if (this.isMerge) {
+        console.log(val)
+        const arrChildren = val.map((item) => item.children)
+        console.log(arrChildren)
+        this.outCodeTable = arrChildren.reduce((arr, next) => {
+          arr = [...arr, ...next]
+          return arr
+        }, [])
+        console.log(this.contentTable, this.outCodeTable)
+        this.contentTable.forEach(item => {
+          if (this.outCodeTable.indexOf(item.id) > -1) {
+            this.outTable.push(item)
+          }
+        })
+      } else {
+        this.outTable = val
+        this.outCodeTable = this.outTable.map(item => item.id)
+      }
+      console.log(this.outTable, this.outCodeTable)
+    },
+    scan(e) {
+      console.log('寮�濮嬫壂鐮佸嚭搴�')
+      this.$message.success('璇峰紑濮嬫壂鐮佸嚭搴�')
+      this.tableData = []
+      this.addScanMonitor()
+      e.srcElement.blur()
+    },
+    async setOptions() {
+      const { data: nameRes } = await selectAllName()
+      // console.log(nameRes)
+      const nameArr = nameRes.productNames.map(item => {
+        return { value: item.id, label: item.productName }
+      })
+      for (const nameItem of nameArr) {
+        const { data } = await selectAllModel({ productNameId: nameItem.value })
+
+        this.options = [...this.options, ...data.models]
+        /* nameItem.children = data.models.map(item => {
+          return { value: item.id, label: item.productModel }
+        }) */
+      }
+      this.options = this.options.map(item => {
+        return { label: item.productModel, value: item.productModel, productCode: item.productCode }
+      })
+      // console.log(this.options)
+    },
+    searchData(res) {
+      console.log(res)
+      const { row, total, productModel, startTime, endTime } = res
+      this.tableData = row
+      this.total = total
+      this.searchModel.productModel = productModel
+      this.searchModel.startTime = startTime
+      this.searchModel.endTime = endTime
+      window.document.onkeypress = undefined
+    },
+    onTableRowClassName({ row, rowIndex }) {
+      if (rowIndex % 2 != 0) {
+        return 'onAcitve'
+      } else {
+        return ''
+      }
+    },
     fetchData() {
       this.listLoading = true
-      getList().then(response => {
-        this.list = response.data.items
+      const obj = {}
+      const arr = Object.keys(this.searchModel).filter(key => this.searchModel[key])
+      arr.forEach(item => obj[item] = this.searchModel[item])
+      getList(obj).then(response => {
+        this.tableData = response.data.row
+        this.total = response.data.total
         this.listLoading = false
+        // console.log(this.tableData)
       })
     },
     handleSizeChange(val) {
@@ -185,31 +594,118 @@
     },
     handleCurrentChange(val) {
       console.log(`褰撳墠椤�: ${val}`)
+    },
+    outHandleSizeChange(val) {
+      console.log(`姣忛〉 ${val} 鏉)
+    },
+    outHandleCurrentChange(val) {
+      console.log(`褰撳墠椤�: ${val}`)
+      this.outPageParams.pageNo = val
+      // this.fetchData()
+      // console.log()
+
+      // console.log(this.addTable.slice((this.outPageParams.pageSize * (val - 1)), (this.outPageParams.pageSize * (val - 1)) + this.outPageParams.pageSize))
     }
+  },
+  computed: {
+    ...mapGetters([
+      'sidebar',
+      'avatar',
+      'name',
+      'allTab'
+    ])
   }
 }
 </script>
 
 <style lang="scss" scoped>
 @import '../../styles/variables.scss';
-.addOperation {
- min-height: calc(100vh - 50px);
+::v-deep .el-table__header .el-checkbox{
+	display:none;
+}
+::v-deep .tableData .el-table__header th:nth-child(1) .cell::before{
+content: '澶氶��';
+}
+.templateOrder{
+  border: 1px solid #000;
+  padding: 8px;
+  >h3{
+    text-align: center;
+  }
+  &-main{
+  border-top: 1px solid #000;
+  border-left: 1px solid #000;
+    .main-row{
+      display: flex;
+      font-size: 12px;
+        >div{
+        border-bottom: 1px solid #000;
+        border-right: 1px solid #000;
+        height: 40px;
+        line-height: 20px;
+        padding: 10px;
+        // margin: 24px;
+        >h4{
+          margin: 0;
+        }
+      }
+      .flex-2{
+        min-width: 110px;
+        max-width: 110px;
+        text-align: right;
+        padding: 10px 6px;
+      }
+      .flex-4{
+        flex: 1;
+        text-align: center;
+      }
+      .flex-8{
+        flex: 8;
+      }
+      .flex-18{
+        flex: 18;
+      }
+    }
+
+  }
+}
+
+.outOperation {
+ min-height: calc(100vh - 100px);
  padding: 25px;
  background: $mainBg;
- .addOperation-main{
+ display: flex;
+ flex-direction: column;
+ .dialog-footer{
+  text-align: center;
+  display: flex;
+  justify-content: space-around;
+ }
+ .outOperation-main{
   background: #fff;
   padding: 20px;
+  flex: 1;
+  display: flex;
+  flex-direction: column;
   .main-top{}
   .table-header{
     background: #6095FB;
   }
- }
- .addOperation-foot{
+  ::v-deep .el-table{
+    flex: 1;
+    // display: flex;
+    // flex-direction: column;
+   ::v-deep .onAcitve td{
+    background-color: #F2F2F2 !important;
+  }
+  }
+  .outOperation-foot{
   margin-top: 25px;
   .el-pagination{
     display: flex;
-    justify-content: center;
+    justify-content: right;
   }
  }
+ }
 }
 </style>

--
Gitblit v1.9.3