From 78d03fa48defaf77c2b533dc4616a210088ab49c Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 17 一月 2025 11:02:51 +0800
Subject: [PATCH] Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/funingyunwei into 2.0.1

---
 admin/src/api/index.js                         |    1 
 admin/src/views/stock/components/InDetail.vue  |   58 ++--
 admin/src/views/stock/in.vue                   |  104 ++++--
 admin/src/views/stock/components/config.js     |   18 +
 admin/src/views/stock/components/OutEdit.vue   |  112 +++++--
 admin/src/views/stock/components/AssetSel.vue  |   50 ++-
 admin/src/views/stock/components/InEdit.vue    |  113 +++++--
 admin/src/views/stock/out.vue                  |  106 ++++--
 admin/src/views/stock/record.vue               |  124 +++++--
 admin/src/views/stock/query.vue                |   27 +
 admin/src/api/store/index.js                   |   44 +++
 admin/src/views/stock/components/OutDetail.vue |   52 +-
 12 files changed, 541 insertions(+), 268 deletions(-)

diff --git a/admin/src/api/index.js b/admin/src/api/index.js
index dc952c6..05f4504 100644
--- a/admin/src/api/index.js
+++ b/admin/src/api/index.js
@@ -3,3 +3,4 @@
 export * from './business/index'
 export * from './other/other'
 export * from './workbench/index'
+export * from './store/index'
diff --git a/admin/src/api/store/index.js b/admin/src/api/store/index.js
new file mode 100644
index 0000000..bcd9b21
--- /dev/null
+++ b/admin/src/api/store/index.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+export function ywOutinboundPage (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywOutinbound/page', data, {
+    trim: true
+  })
+}
+export function ywOutinboundEx (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywOutinbound/exportExcel', data, {
+    trim: true
+  })
+}
+export function ywOutinboundDetail (id) {
+  return request.get('/visitsAdmin/cloudService/business/ywOutinbound/' + id)
+}
+
+export function ywOutinboundCreate (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywOutinbound/create', data, {
+    trim: true
+  })
+}
+
+// 搴撳瓨鏌ヨ
+export function ywStockPage (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywStock/page', data, {
+    trim: true
+  })
+}
+export function ywStockPageEx (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywStock/exportExcel', data, {
+    trim: true
+  })
+}
+
+export function ywOutinboundRecord (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywOutinboundRecord/page', data, {
+    trim: true
+  })
+}
+export function ywOutinboundRecordEx (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywOutinboundRecord/exportExcel', data, {
+    trim: true
+  })
+}
\ No newline at end of file
diff --git a/admin/src/views/stock/components/AssetSel.vue b/admin/src/views/stock/components/AssetSel.vue
index afbbb23..a315d02 100644
--- a/admin/src/views/stock/components/AssetSel.vue
+++ b/admin/src/views/stock/components/AssetSel.vue
@@ -2,8 +2,8 @@
   <GlobalWindow title="閫夋嫨鐗╂枡" :visible.sync="isShowModal" :confirm-working="isLoading" width="900px" @close="close"
     @confirm="confirm">
     <el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
-      <el-form-item prop="areaType" label="鐗╂枡淇℃伅">
-        <el-input v-model="searchForm.aaa" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�/鍚嶇О" @keypress.enter.native="search"></el-input>
+      <el-form-item prop="code" label="鐗╂枡淇℃伅">
+        <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�/鍚嶇О" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item prop="areaIds" label="鐗╂枡鍒嗙被">
         <el-cascader v-model="searchForm.areaIds" @change="changeSel" placeholder="璇烽�夋嫨鐗╂枡鍒嗙被" clearable
@@ -14,22 +14,22 @@
           }"></el-cascader>
       </el-form-item>
       <span>
-        <el-button type="primary" @click="getList">鎼滅储</el-button>
+        <el-button type="primary" @click="getList(1)">鎼滅储</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
       </span>
     </el-form>
     <!--  -->
     <el-table @selection-change="handleSelectionChange" :data="list" stripe>
       <el-table-column type="selection"  width="55" />
-      <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" min-width="100px"></el-table-column>
-      <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" min-width="80px"></el-table-column>
-      <el-table-column prop="createDate" label="鏉$爜" min-width="100px"></el-table-column>
-      <el-table-column prop="dealUserName" label="鍝佺墝" min-width="80px"></el-table-column>
-      <el-table-column prop="dealUserName" label="瑙勬牸鍨嬪彿" min-width="80px"></el-table-column>
-      <el-table-column prop="dealUserName" label="鍗曚綅" min-width="80px"></el-table-column>
-      <el-table-column prop="dealUserName" label="搴撳瓨" min-width="80px"></el-table-column>
+      <el-table-column prop="code" label="鐗╂枡缂栫爜" min-width="100px"></el-table-column>
+      <el-table-column prop="name" label="鐗╂枡鍚嶇О" min-width="80px"></el-table-column>
+      <el-table-column prop="qrcode" label="鏉$爜" min-width="100px"></el-table-column>
+      <el-table-column prop="brand" label="鍝佺墝" min-width="80px"></el-table-column>
+      <el-table-column prop="attr" label="瑙勬牸鍨嬪彿" min-width="80px"></el-table-column>
+      <el-table-column prop="unitName" label="鍗曚綅" min-width="80px"></el-table-column>
+      <el-table-column prop="maxStock" label="搴撳瓨" min-width="80px"></el-table-column>
     </el-table>
-    <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination">
+    <Pagination class="mt10" @size-change="handleSizeChange" @current-change="getList" :pagination="pagination">
     </Pagination>
   </GlobalWindow>
 </template>
@@ -38,6 +38,8 @@
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import Pagination from '@/components/common/Pagination'
+import { fetchList } from '@/api/ywMaterial'
+import { ywStockPage } from '@/api/store/index'
 import { fetchList as getCateList } from '@/api/business/category.js'
 export default {
   name: 'OperaCategoryWindow',
@@ -51,6 +53,7 @@
         page: 1,
         total: 0
       },
+      isOut: false,
       list: [],
       selList: [],
       cateList: [],
@@ -64,7 +67,7 @@
     }
   },
   created() {
-    this.initData()
+    this.getCate()
   },
   methods: {
     confirm() {
@@ -75,10 +78,13 @@
       this.selList = val
     },
     getList(page) {
-      const { pagination, searchForm } = this
+      const { pagination, searchForm, isOut } = this
       this.listLoading = true
       if(page){pagination.page = page}
-      fetchList({
+      console.log('isOut', isOut);
+      
+      let fn = isOut ? ywStockPage : fetchList
+      fn({
         capacity: pagination.pageSize,
         page: pagination.page,
         model: {...searchForm}
@@ -86,13 +92,25 @@
         this.listLoading = false
         this.list = res.records
         this.pagination.total = res.total || 0
+        if(isOut){
+          this.list.forEach(item => {
+            item.brand = item.materialBrand
+            item.attr = item.materialAttr
+            item.name = item.materialName
+            item.id = item.materialId
+            item.code = item.materialCode
+            item.qrcode = item.materialQrcode
+            item.unitName = item.materialUnitName
+            item.maxStock = item.stock
+          })
+        }
       }, () => {
         this.listLoading = false
       })
     },
-    initData() {
+    getCate() {
       getCateList({
-        model: { type: 3 },
+        model: { type: 7 },
         capacity: 1000,
         page: 1,
       }).then(res => {
diff --git a/admin/src/views/stock/components/InDetail.vue b/admin/src/views/stock/components/InDetail.vue
index ad73ba4..e3e8476 100644
--- a/admin/src/views/stock/components/InDetail.vue
+++ b/admin/src/views/stock/components/InDetail.vue
@@ -1,43 +1,46 @@
 <template>
-  <GlobalWindow width="960px" title="鍑哄簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close"
+  <GlobalWindow width="960px" :showConfirm="false" title="鍏ュ簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close"
     @confirm="confirm">
     <div class="main">
+      <div class="title" style="color: #333333;">
+        <span>鍏ュ簱鍗曠紪鍙凤細{{ info.code }}</span>
+      </div>
       <div class="title">
-        <span>宸ュ崟璇︽儏</span>
+        <span>鍩虹淇℃伅</span>
       </div>
       <div class="main_content">
         <div class="list">
           <div class="item">
-            <div class="la">鍑哄簱浠撳簱</div>
-            <div class="val">{{ info.projectName }}</div>
+            <div class="la">鍏ュ簱浠撳簱</div>
+            <div class="val">{{ info.warehouseName }}</div>
           </div>
           <div class="item">
-            <div class="la">鍑哄簱鏃ユ湡</div>
-            <div class="val">{{ info.categoryName }}</div>
+            <div class="la">鍏ュ簱鏃ユ湡</div>
+            <div class="val">{{ info.doneDate }}</div>
           </div>
           <div class="item">
-            <div class="la">鍑哄簱绫诲瀷</div>
-            <div class="val">{{ info.creatorName }}{{ info.creatorCompany ? "-" + info.creatorCompany : '' }}</div>
+            <div class="la">鍏ュ簱绫诲瀷</div>
+            <div class="val" v-if="info.type || info.type == 0">{{ StoreTypeOps[info.type].name }}</div>
           </div>
           <div class="item">
             <div class="la">澶勭悊浜�</div>
-            <div class="val">{{ info.creatorPhone || info.creatorMobile }}</div>
+            <div class="val">{{ info.createUserName }}</div>
           </div>
-          <div class="item">
+          <div class="item" style="width: 66.6%;">
             <div class="la">澶囨敞</div>
-            <div class="val">{{ info.createDate }}</div>
+            <div class="val">{{ info.remark }}</div>
           </div>
         </div>
       </div>
       <div class="title">鐗╂枡淇℃伅</div>
-      <el-table :data="list" stripe>
-        <el-table-column align="center" type="index" width="55" />
-        <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
-        <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column>
-        <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column>
-        <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column>
-        <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column>
-        <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
+      <el-table :data="info.recordList" stripe>
+        <el-table-column align="center" label="搴忓彿" type="index" width="55" />
+        <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
+        <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column>
+        <el-table-column prop="materialQrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column>
+        <el-table-column prop="materialBrand" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column>
+        <el-table-column prop="materialUnitName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column>
+        <el-table-column prop="stock" label="鍏ュ簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
       </el-table>
     </div>
   </GlobalWindow>
@@ -46,10 +49,8 @@
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
 import BaseOpera from '@/components/base/BaseOpera'
-import { detailById, dispatchOrder, dealOrder } from '@/api/workorder/ywWorkorder'
-import { getUserList } from '@/api/system/user'
-import { Message, Loading } from 'element-ui'
-import dayjs from 'dayjs'
+import { ywOutinboundDetail } from '@/api'
+import { StoreTypeOps } from './config'
 export default {
   components: {
     GlobalWindow
@@ -57,21 +58,18 @@
   extends: BaseOpera,
   data() {
     return {
-      id: '',
       visible: false,
-      info: {},
-      list: []
+      info: {recordList: []},
+      StoreTypeOps
 
 
     }
   },
   created() {
-    // this.getDetail()
   },
   methods: {
-    getDetail() {
-      const { id } = this
-      detailById(id).then(res => {
+    getDetail(id) {
+      ywOutinboundDetail(id).then(res => {
         this.info = res
       })
     },
diff --git a/admin/src/views/stock/components/InEdit.vue b/admin/src/views/stock/components/InEdit.vue
index 3bc1a30..b19d3a0 100644
--- a/admin/src/views/stock/components/InEdit.vue
+++ b/admin/src/views/stock/components/InEdit.vue
@@ -1,27 +1,27 @@
 <template>
-  <GlobalWindow title="鏂板缓鍑哄簱鍗�" :visible.sync="isShowModal" :confirm-working="isLoading" width="900px" @close="close"
+  <GlobalWindow title="鏂板缓鍏ュ簱鍗�" :visible.sync="isShowModal" :confirm-working="isLoading" width="900px" @close="close"
     @confirm="confirm">
     <el-form :model="param" ref="form" :rules="rules">
       <div class="df_ac">
-        <el-form-item class="w3" label="鍑哄簱浠撳簱" prop="parentId">
-          <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�">
-            <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option>
+        <el-form-item class="w3" label="鍏ュ簱浠撳簱" prop="warehouseId">
+          <el-select :disabled="param.id" v-model="param.warehouseId" placeholder="璇烽�夋嫨">
+            <el-option v-for="op in storeList" :key="op.id" :label="op.name" :value="op.id"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item class="w3" label="鍑哄簱鏃ユ湡">
-          <el-date-picker type="date" v-model="param.getDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
-            placeholder="璇烽�夋嫨鍑哄簱鏃ユ湡"></el-date-picker>
+        <el-form-item class="w3" label="鍏ュ簱鏃ユ湡" prop="doneDate">
+          <el-date-picker type="date" v-model="param.doneDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨鍏ュ簱鏃ユ湡"></el-date-picker>
         </el-form-item>
-        <el-form-item class="w3" label="鍑哄簱绫诲瀷" prop="parentId">
-          <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�">
-            <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option>
+        <el-form-item class="w3" label="鍏ュ簱绫诲瀷" prop="type">
+          <el-select :disabled="param.id" v-model="param.type" placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷">
+            <el-option v-for="op in StoreTypeOps" :key="op.id" :label="op.name" :value="op.id"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item class="w3" label="澶勭悊浜�" prop="name">
-          <el-input v-model="param.name" v-trim />
+          <el-input v-model="param.createUserName" :disabled="true" v-trim />
         </el-form-item>
-        <el-form-item class="w6" label="澶囨敞" prop="name">
-          <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim />
+        <el-form-item class="w6" label="澶囨敞" prop="remark">
+          <el-input v-model="param.remark" placeholder="璇疯緭鍏�" v-trim />
         </el-form-item>
       </div>
     </el-form>
@@ -32,18 +32,19 @@
     <el-button type="primary" @click="handleOpenMaterial">閫夋嫨鐗╂枡</el-button>
     <el-table :data="list" stripe>
       <el-table-column align="center" label="搴忓彿" type="index" width="50" />
-      <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
-      <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column>
-      <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column>
-      <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column>
-      <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column>
-      <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" min-width="90px">
-        <template v-slot="{row}">
-          <el-input oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 11)" v-model="row.aa" class="w100"></el-input>
+      <el-table-column prop="name" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
+      <el-table-column prop="code" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column>
+      <el-table-column prop="qrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column>
+      <el-table-column prop="brand" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column>
+      <el-table-column prop="unitName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column>
+      <el-table-column prop="dealUserName" label="鍏ュ簱鏁伴噺" min-width="90px">
+        <template v-slot="{ row }">
+          <el-input oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 11)" v-model="row.stock"
+            class="w100"></el-input>
         </template>
       </el-table-column>
-      <el-table-column prop="dealUserName" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
-      <el-table-column prop="dealUserName" label="鎿嶄綔" min-width="60px">
+      <el-table-column prop="maxStock" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
+      <el-table-column label="鎿嶄綔" min-width="60px">
         <template v-slot="scope">
           <span @click="handleDel(scope)" class="red pointer">鍒犻櫎</span>
         </template>
@@ -57,52 +58,92 @@
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
 import AssetSel from './AssetSel'
-import { create, fetchCateList, getInfoById } from '@/api/business/category.js'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
+import { ywOutinboundCreate } from '@/api/store/index'
+import { StoreTypeOps, rules } from './config'
+import { Message } from 'element-ui'
 export default {
   name: 'OperaCategoryWindow',
   components: { GlobalWindow, AssetSel },
   data() {
     return {
       // 琛ㄥ崟鏁版嵁
-      param: {},
+      param: {
+        createUserName: this.$store.state.userInfo.username,
+        creator: this.$store.state.userInfo.id,
+        inOut: 0
+      },
       activeName: 'first',
       isShowModal: false,
       isShowSel: false,
       isLoading: false,
       // 楠岃瘉瑙勫垯
-      rules: {
-        name: [{ required: true, message: '璇疯緭鍏ヤ簩绾у垎绫诲悕绉�', trigger: 'blur' }],
-      },
-      list: [{}],
+      rules,
+      storeList: [],
+      list: [],
+      StoreTypeOps: StoreTypeOps.filter(i => i.type == 0),
 
       dataList: [],
     }
   },
   created() {
+    this.initData()
+    console.log(this.$store.state.userInfo)
 
   },
   methods: {
     confirm() {
-
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          const { param, list } = this
+          if(list.length == 0) return Message.warning('璇峰厛閫夋嫨鐗╂枡淇℃伅')
+          let count = 0 // 鍏ュ簱鏁伴噺蹇呭~
+          list.forEach(item => {
+            if(!item.stock) count ++
+          })
+          if(count > 0) return Message.warning('璇疯緭鍏ユ纭殑鍏ュ簱鏁伴噺')
+          this.isLoading = true
+          ywOutinboundCreate({
+            ...param,
+            recordList: list
+          }).then(res => {
+            this.isLoading = false
+            Message.success('鎻愪氦鎴愬姛')
+            this.$emit('success')
+            this.close()
+          }, () => {
+            this.isLoading = false
+          })
+        }
+      })
     },
-    getList() {
-      fetchCateList({ type: 5 }).then(res => {
-        this.dataList = res || []
+    initData() {
+      getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => {
+        this.storeList = res.records || []
 
       })
     },
-    changeSel() {
-
+    changeSel(val) {
+      const list = val
+      list.forEach(item => {
+        const index = this.list.findIndex(i => i.id == item.id)
+        if(index == -1){
+          item.materialId = item.id
+          item.multifile = null
+          this.list.push(item)
+        }
+      })
     },
     handleDel(val) {
       const index = val.$index
       this.list.splice(index, 1)
-      
+
     },
     handleOpenMaterial() {
       this.isShowSel = true
       this.$nextTick(() => {
         this.$refs.AssetSelRef.isShowModal = true
+        this.$refs.AssetSelRef.getList()
       })
     },
     close() {
diff --git a/admin/src/views/stock/components/OutDetail.vue b/admin/src/views/stock/components/OutDetail.vue
index ad73ba4..9a0db95 100644
--- a/admin/src/views/stock/components/OutDetail.vue
+++ b/admin/src/views/stock/components/OutDetail.vue
@@ -1,43 +1,46 @@
 <template>
-  <GlobalWindow width="960px" title="鍑哄簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close"
+  <GlobalWindow width="960px" :showConfirm="false" title="鍑哄簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close"
     @confirm="confirm">
     <div class="main">
+      <div class="title" style="color: #333333;">
+        <span>鍑哄簱鍗曠紪鍙凤細{{ info.code }}</span>
+      </div>
       <div class="title">
-        <span>宸ュ崟璇︽儏</span>
+        <span>鍩虹淇℃伅</span>
       </div>
       <div class="main_content">
         <div class="list">
           <div class="item">
             <div class="la">鍑哄簱浠撳簱</div>
-            <div class="val">{{ info.projectName }}</div>
+            <div class="val">{{ info.warehouseName }}</div>
           </div>
           <div class="item">
             <div class="la">鍑哄簱鏃ユ湡</div>
-            <div class="val">{{ info.categoryName }}</div>
+            <div class="val">{{ info.doneDate }}</div>
           </div>
           <div class="item">
             <div class="la">鍑哄簱绫诲瀷</div>
-            <div class="val">{{ info.creatorName }}{{ info.creatorCompany ? "-" + info.creatorCompany : '' }}</div>
+            <div class="val" v-if="info.type || info.type == 0">{{ StoreTypeOps[info.type].name }}</div>
           </div>
           <div class="item">
             <div class="la">澶勭悊浜�</div>
-            <div class="val">{{ info.creatorPhone || info.creatorMobile }}</div>
+            <div class="val">{{ info.createUserName }}</div>
           </div>
-          <div class="item">
+          <div class="item" style="width: 66.6%;">
             <div class="la">澶囨敞</div>
-            <div class="val">{{ info.createDate }}</div>
+            <div class="val">{{ info.remark }}</div>
           </div>
         </div>
       </div>
       <div class="title">鐗╂枡淇℃伅</div>
-      <el-table :data="list" stripe>
-        <el-table-column align="center" type="index" width="55" />
-        <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
-        <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column>
-        <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column>
-        <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column>
-        <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column>
-        <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
+      <el-table :data="info.recordList" stripe>
+        <el-table-column align="center" label="搴忓彿" type="index" width="55" />
+        <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
+        <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column>
+        <el-table-column prop="materialQrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column>
+        <el-table-column prop="materialBrand" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column>
+        <el-table-column prop="materialUnitName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column>
+        <el-table-column prop="stock" label="鍑哄簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
       </el-table>
     </div>
   </GlobalWindow>
@@ -46,10 +49,8 @@
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
 import BaseOpera from '@/components/base/BaseOpera'
-import { detailById, dispatchOrder, dealOrder } from '@/api/workorder/ywWorkorder'
-import { getUserList } from '@/api/system/user'
-import { Message, Loading } from 'element-ui'
-import dayjs from 'dayjs'
+import { ywOutinboundDetail } from '@/api'
+import { StoreTypeOps } from './config'
 export default {
   components: {
     GlobalWindow
@@ -57,21 +58,18 @@
   extends: BaseOpera,
   data() {
     return {
-      id: '',
       visible: false,
-      info: {},
-      list: []
+      info: {recordList: []},
+      StoreTypeOps
 
 
     }
   },
   created() {
-    // this.getDetail()
   },
   methods: {
-    getDetail() {
-      const { id } = this
-      detailById(id).then(res => {
+    getDetail(id) {
+      ywOutinboundDetail(id).then(res => {
         this.info = res
       })
     },
diff --git a/admin/src/views/stock/components/OutEdit.vue b/admin/src/views/stock/components/OutEdit.vue
index 3bc1a30..dd12706 100644
--- a/admin/src/views/stock/components/OutEdit.vue
+++ b/admin/src/views/stock/components/OutEdit.vue
@@ -3,25 +3,25 @@
     @confirm="confirm">
     <el-form :model="param" ref="form" :rules="rules">
       <div class="df_ac">
-        <el-form-item class="w3" label="鍑哄簱浠撳簱" prop="parentId">
-          <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�">
-            <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option>
+        <el-form-item class="w3" label="鍑哄簱浠撳簱" prop="warehouseId">
+          <el-select :disabled="param.id" v-model="param.warehouseId" placeholder="璇烽�夋嫨">
+            <el-option v-for="op in storeList" :key="op.id" :label="op.name" :value="op.id"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item class="w3" label="鍑哄簱鏃ユ湡">
-          <el-date-picker type="date" v-model="param.getDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
+        <el-form-item class="w3" label="鍑哄簱鏃ユ湡" prop="doneDate">
+          <el-date-picker type="date" v-model="param.doneDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
             placeholder="璇烽�夋嫨鍑哄簱鏃ユ湡"></el-date-picker>
         </el-form-item>
-        <el-form-item class="w3" label="鍑哄簱绫诲瀷" prop="parentId">
-          <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�">
-            <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option>
+        <el-form-item class="w3" label="鍑哄簱绫诲瀷" prop="type">
+          <el-select :disabled="param.id" v-model="param.type" placeholder="璇烽�夋嫨鍑哄簱绫诲瀷">
+            <el-option v-for="op in StoreTypeOps" :key="op.id" :label="op.name" :value="op.id"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item class="w3" label="澶勭悊浜�" prop="name">
-          <el-input v-model="param.name" v-trim />
+          <el-input v-model="param.createUserName" :disabled="true" v-trim />
         </el-form-item>
-        <el-form-item class="w6" label="澶囨敞" prop="name">
-          <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim />
+        <el-form-item class="w6" label="澶囨敞" prop="remark">
+          <el-input v-model="param.remark" placeholder="璇疯緭鍏�" v-trim />
         </el-form-item>
       </div>
     </el-form>
@@ -32,18 +32,19 @@
     <el-button type="primary" @click="handleOpenMaterial">閫夋嫨鐗╂枡</el-button>
     <el-table :data="list" stripe>
       <el-table-column align="center" label="搴忓彿" type="index" width="50" />
-      <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
-      <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column>
-      <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column>
-      <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column>
-      <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column>
+      <el-table-column prop="name" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column>
+      <el-table-column prop="code" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column>
+      <el-table-column prop="qrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column>
+      <el-table-column prop="brand" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column>
+      <el-table-column prop="unitName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column>
       <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" min-width="90px">
-        <template v-slot="{row}">
-          <el-input oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 11)" v-model="row.aa" class="w100"></el-input>
+        <template v-slot="{ row }">
+          <el-input oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 11)" v-model="row.stock"
+            class="w100"></el-input>
         </template>
       </el-table-column>
-      <el-table-column prop="dealUserName" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
-      <el-table-column prop="dealUserName" label="鎿嶄綔" min-width="60px">
+      <el-table-column prop="maxStock" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
+      <el-table-column label="鎿嶄綔" min-width="60px">
         <template v-slot="scope">
           <span @click="handleDel(scope)" class="red pointer">鍒犻櫎</span>
         </template>
@@ -57,52 +58,91 @@
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
 import AssetSel from './AssetSel'
-import { create, fetchCateList, getInfoById } from '@/api/business/category.js'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
+import { ywOutinboundCreate } from '@/api/store/index'
+import { StoreTypeOps, rules } from './config'
+import { Message } from 'element-ui'
 export default {
   name: 'OperaCategoryWindow',
   components: { GlobalWindow, AssetSel },
   data() {
     return {
       // 琛ㄥ崟鏁版嵁
-      param: {},
+      param: {
+        createUserName: this.$store.state.userInfo.username,
+        creator: this.$store.state.userInfo.id,
+        inOut: 1
+      },
       activeName: 'first',
       isShowModal: false,
       isShowSel: false,
       isLoading: false,
       // 楠岃瘉瑙勫垯
-      rules: {
-        name: [{ required: true, message: '璇疯緭鍏ヤ簩绾у垎绫诲悕绉�', trigger: 'blur' }],
-      },
-      list: [{}],
+      rules,
+      storeList: [],
+      list: [],
+      StoreTypeOps: StoreTypeOps.filter(i => i.type == 1),
 
       dataList: [],
     }
   },
   created() {
-
+    this.initData()
   },
   methods: {
     confirm() {
-
-    },
-    getList() {
-      fetchCateList({ type: 5 }).then(res => {
-        this.dataList = res || []
-
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          const { param, list } = this
+          if(list.length == 0) return Message.warning('璇峰厛閫夋嫨鐗╂枡淇℃伅')
+          let count = 0 // 鍑哄簱鏁伴噺蹇呭~
+          list.forEach(item => {
+            if(!item.stock) count ++
+          })
+          if(count > 0) return Message.warning('璇疯緭鍏ユ纭殑鍑哄簱鏁伴噺')
+          this.isLoading = true
+          ywOutinboundCreate({
+            ...param,
+            recordList: list
+          }).then(res => {
+            this.isLoading = false
+            Message.success('鎻愪氦鎴愬姛')
+            this.$emit('success')
+            this.close()
+          }, () => {
+            this.isLoading = false
+          })
+        }
       })
     },
-    changeSel() {
-
+    initData() {
+      getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => {
+        this.storeList = res.records || []
+      })
+    },
+    changeSel(val) {
+      const list = val
+      list.forEach(item => {
+        if(this.list.indexOf(item.id) === -1){
+          item.materialId = item.id
+          item.stock = null
+          this.list.push(item)
+        }
+      })
     },
     handleDel(val) {
       const index = val.$index
       this.list.splice(index, 1)
-      
+
     },
     handleOpenMaterial() {
       this.isShowSel = true
       this.$nextTick(() => {
         this.$refs.AssetSelRef.isShowModal = true
+        this.$refs.AssetSelRef.isOut = true
+        this.$refs.AssetSelRef.getList()
+        console.log('-----');
+        
       })
     },
     close() {
diff --git a/admin/src/views/stock/components/config.js b/admin/src/views/stock/components/config.js
new file mode 100644
index 0000000..7b0333f
--- /dev/null
+++ b/admin/src/views/stock/components/config.js
@@ -0,0 +1,18 @@
+export const StoreTypeOps = [
+  { name: '閲囪喘鍏ュ簱', id: 0, type: 0 },
+  { name: '棰嗙敤閫�鍥�', id: 1, type: 0 },
+  { name: '璋冩暣鍏ュ簱', id: 2, type: 0 },
+  { name: '鍏朵粬鍏ュ簱', id: 3, type: 0 },
+  { name: '鐩樼泩鍏ュ簱', id: 4, type: 0 },
+  { name: '棰嗙敤鍑哄簱', id: 5, type: 1 },
+  { name: '浠撳簱鍑哄簱', id: 6, type: 1 },
+  { name: '璋冩暣鍑哄簱', id: 7, type: 1 },
+  { name: '閲囪喘鍑哄簱', id: 8, type: 1 },
+  { name: '鍏朵粬鍑哄簱', id: 9, type: 1 },
+  { name: '鐩樺嚭鍑哄簱', id: 10, type: 1 },
+]
+export const rules = {
+  warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+  doneDate: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+  type: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+}
\ No newline at end of file
diff --git a/admin/src/views/stock/in.vue b/admin/src/views/stock/in.vue
index ee899e6..3d50b84 100644
--- a/admin/src/views/stock/in.vue
+++ b/admin/src/views/stock/in.vue
@@ -2,17 +2,22 @@
   <div class="main_app">
     <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
     <div class="mt20">
-      <el-button type="primary" @click="handleEdit()" v-permissions="['business:ywpatrolline:create']">鏂板缓鍑哄簱鍗�</el-button>
+      <el-button type="primary" @click="handleEdit()" v-permissions="['business:ywpatrolline:create']">鏂板缓鍏ュ簱鍗�</el-button>
       <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
     </div>
     <el-table v-loading="loading" :data="list" stripe>
-      <el-table-column prop="platformName" label="鍑哄簱鍗曞彿" min-width="120" show-overflow-tooltip />
-      <el-table-column prop="platformGroupName" label="鍑哄簱浠撳簱" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="carCodeFront" label="鍑哄簱绫诲瀷" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="carCodeBack" label="鍑哄簱鏃ユ湡" min-width="110" show-overflow-tooltip />
-      <el-table-column prop="param1" label="鍑哄簱鏁伴噺" min-width="120" show-overflow-tooltip />
-      <el-table-column prop="param2" label="鎿嶄綔浜�" min-width="90" show-overflow-tooltip />
-      <el-table-column prop="workTime" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip />
+      <el-table-column prop="code" label="鍏ュ簱鍗曞彿" min-width="120" show-overflow-tooltip />
+      <el-table-column prop="warehouseName" label="鍏ュ簱浠撳簱" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="typeName" label="鍏ュ簱绫诲瀷" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="doneDate" label="鍏ュ簱鏃ユ湡" min-width="110" show-overflow-tooltip />
+      <el-table-column label="鍏ュ簱鏁伴噺" min-width="140">
+        <template v-slot="{ row }">
+          <div v-for="item in row.recordList">{{ item.materialName }}[{{ item.materialCode }}]*{{ item.stock }}{{
+            item.materialUnitName }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="createUserName" label="鎿嶄綔浜�" min-width="90" show-overflow-tooltip />
+      <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip />
       <el-table-column prop="workTime" label="鎿嶄綔" min-width="80" show-overflow-tooltip>
         <template v-slot="{ row }">
           <span @click="handleDetail(row)" class="primaryColor pointer">鏌ョ湅璇︽儏</span>
@@ -36,7 +41,9 @@
 import dayjs from 'dayjs'
 import duration from 'dayjs/plugin/duration'
 dayjs.extend(duration)
-import { platformLogPage, getPlatformGroupList } from '@/api'
+import { ywOutinboundPage, ywOutinboundEx } from '@/api'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
+import { StoreTypeOps, rules } from './components/config'
 export default {
   components: {
     Pagination,
@@ -54,26 +61,34 @@
         page: 1,
         total: 0
       },
-      filters: {},
-      list: [{}],
+      filters: {
+        inOut: 0
+      },
+      StoreTypeOps,
+      list: [],
       total: 0,
       queryFormConfig: {
         formItems: [
           {
-            filed: 'carCodeFront',
+            filed: 'code',
             type: 'input',
-            label: '鍑哄簱鍗曞彿',
+            label: '鍏ュ簱鍗曞彿',
           },
           {
-            filed: 'platformGroupId',
+            filed: 'warehouseId',
             type: 'select',
             label: '鎵�鍦ㄤ粨搴�',
+            labelCode: 'name',
+            valueCode: 'id',
             options: []
           },
           {
-            filed: 'carCodeFront',
-            type: 'input',
-            label: '鍑哄簱绫诲瀷',
+            filed: 'type',
+            type: 'select',
+            label: '鍏ュ簱绫诲瀷',
+            labelCode: 'name',
+            valueCode: 'id',
+            options: StoreTypeOps.filter(i => i.type == 0)
           },
         ],
         online: true
@@ -81,8 +96,8 @@
     }
   },
   created() {
-    // this.getList()
-    // this.getGroupList()
+    this.getList()
+    this.initData()
   },
   methods: {
     handleSub() {
@@ -98,45 +113,56 @@
         this.$refs.InEditRef.isShowModal = true
       })
     },
-    handleDetail() {
+    handleDetail(row) {
       this.isShowDetail = true
       this.$nextTick(() => {
         this.$refs.InDetailRef.visible = true
+        this.$refs.InDetailRef.getDetail(row.id)
       })
     },
-    handleEx() { },
-    getGroupList() {
-      getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
-        this.queryFormConfig.formItems[1].options = res.map(i => {
-          return {
-            value: i.id,
-            label: i.name
-          }
+    handleEx() {
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.loading = true
+          ywOutinboundEx({
+            page: this.pagination.page,
+            capacity: 1000000,
+            model: this.filters
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.loading = false
+            })
         })
-        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
+        .catch(() => { })
+    },
+    initData() {
+      getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => {
+        this.queryFormConfig.formItems[1].options = res.records || []
       })
     },
     getList(page) {
       const { pagination, filters } = this
       this.loading = true
-      if(page){pagination.page = page}
-      platformLogPage({
+      if (page) { pagination.page = page }
+      ywOutinboundPage({
         model: {
           ...filters,
-          queryStatus: '6,7,8',
-          beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
-          beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
+          inOut: 0
         },
-        sorts: [{ direction: 'DESC', property: 'param1' }],
+        // sorts: [{ direction: 'DESC', property: 'param1' }],
         capacity: pagination.pageSize,
         page: page,
       }).then(res => {
         this.loading = false
         this.list = res.records || []
         this.list.forEach(item => {
-          item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'
-          item.taskOrigin = 'WMS鑾峰彇'
-          item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�')
+          item.typeName = this.StoreTypeOps[item.type].name
         })
         this.pagination.total = res.total || 0
       }, () => {
@@ -144,7 +170,7 @@
       })
     },
     clear() {
-      this.filters = {}
+      this.filters = {inOut: 0}
       this.pagination.pageSize = 10
       this.pagination.page = 1
       this.getList()
diff --git a/admin/src/views/stock/out.vue b/admin/src/views/stock/out.vue
index 07aca66..7d2e98f 100644
--- a/admin/src/views/stock/out.vue
+++ b/admin/src/views/stock/out.vue
@@ -6,13 +6,17 @@
       <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
     </div>
     <el-table v-loading="loading" :data="list" stripe>
-      <el-table-column prop="platformName" label="鍑哄簱鍗曞彿" min-width="120" show-overflow-tooltip />
-      <el-table-column prop="platformGroupName" label="鍑哄簱浠撳簱" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="carCodeFront" label="鍑哄簱绫诲瀷" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="carCodeBack" label="鍑哄簱鏃ユ湡" min-width="110" show-overflow-tooltip />
-      <el-table-column prop="param1" label="鍑哄簱鏁伴噺" min-width="120" show-overflow-tooltip />
-      <el-table-column prop="param2" label="鎿嶄綔浜�" min-width="90" show-overflow-tooltip />
-      <el-table-column prop="workTime" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip />
+      <el-table-column prop="code" label="鍑哄簱鍗曞彿" min-width="120" show-overflow-tooltip />
+      <el-table-column prop="warehouseName" label="鍑哄簱浠撳簱" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="typeName" label="鍑哄簱绫诲瀷" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="doneDate" label="鍑哄簱鏃ユ湡" min-width="110" show-overflow-tooltip />
+      <el-table-column label="鍑哄簱鏁伴噺" min-width="140">
+        <template v-slot="{ row }">
+          <div v-for="item in row.recordList">{{ item.materialName }}[{{ item.materialCode }}]*{{ item.stock }}{{ item.materialUnitName }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="createUserName" label="棰嗙敤浜�" min-width="90" show-overflow-tooltip />
+      <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip />
       <el-table-column prop="workTime" label="鎿嶄綔" min-width="80" show-overflow-tooltip>
         <template v-slot="{ row }">
           <span @click="handleDetail(row)" class="primaryColor pointer">鏌ョ湅璇︽儏</span>
@@ -24,19 +28,21 @@
     </div>
     <!--  -->
     <OutEdit v-if="isShowEdit" @close="isShowEdit = false" @success="getList" ref="OutEditRef" />
-    <OutDetail v-if="isShowDetail" ref="OutDetailRef" />
+    <OutDetail v-if="isShowDetail" ref="InDetailRef" />
   </div>
 </template>
 
 <script>
 import Pagination from '@/components/common/Pagination'
 import QueryForm from '@/components/common/QueryForm'
-import OutEdit from './components/OutEdit'
-import OutDetail from './components/OutDetail'
+import OutEdit from './components/OutEdit.vue'
+import OutDetail from './components/OutDetail.vue'
 import dayjs from 'dayjs'
 import duration from 'dayjs/plugin/duration'
 dayjs.extend(duration)
-import { platformLogPage, getPlatformGroupList } from '@/api'
+import { ywOutinboundPage } from '@/api'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
+import { StoreTypeOps, rules } from './components/config'
 export default {
   components: {
     Pagination,
@@ -54,26 +60,34 @@
         page: 1,
         total: 0
       },
-      filters: {},
-      list: [{}],
+      filters: {
+        inOut: 1
+      },
+      StoreTypeOps,
+      list: [],
       total: 0,
       queryFormConfig: {
         formItems: [
           {
-            filed: 'carCodeFront',
+            filed: 'code',
             type: 'input',
             label: '鍑哄簱鍗曞彿',
           },
           {
-            filed: 'platformGroupId',
+            filed: 'warehouseId',
             type: 'select',
             label: '鎵�鍦ㄤ粨搴�',
+            labelCode: 'name',
+            valueCode: 'id',
             options: []
           },
           {
-            filed: 'carCodeFront',
-            type: 'input',
+            filed: 'type',
+            type: 'select',
             label: '鍑哄簱绫诲瀷',
+            labelCode: 'name',
+            valueCode: 'id',
+            options: StoreTypeOps.filter(i => i.type == 0)
           },
         ],
         online: true
@@ -81,8 +95,8 @@
     }
   },
   created() {
-    // this.getList()
-    // this.getGroupList()
+    this.getList()
+    this.initData()
   },
   methods: {
     handleSub() {
@@ -98,45 +112,55 @@
         this.$refs.OutEditRef.isShowModal = true
       })
     },
-    handleDetail() {
+    handleDetail(row) {
       this.isShowDetail = true
       this.$nextTick(() => {
-        this.$refs.OutDetailRef.visible = true
+        this.$refs.InDetailRef.visible = true
+        this.$refs.InDetailRef.getDetail(row.id)
       })
     },
-    handleEx() { },
-    getGroupList() {
-      getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
-        this.queryFormConfig.formItems[1].options = res.map(i => {
-          return {
-            value: i.id,
-            label: i.name
-          }
+    handleEx() {
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.loading = true
+          ywOutinboundEx({
+            page: this.pagination.page,
+            capacity: 1000000,
+            model: this.filters
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.loading = false
+            })
         })
-        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
+        .catch(() => { })
+    },
+    initData() {
+      getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => {
+        this.queryFormConfig.formItems[1].options = res.records || []
       })
     },
     getList(page) {
       const { pagination, filters } = this
       this.loading = true
       if(page){pagination.page = page}
-      platformLogPage({
+      ywOutinboundPage({
         model: {
-          ...filters,
-          queryStatus: '6,7,8',
-          beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
-          beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
+          ...filters
         },
-        sorts: [{ direction: 'DESC', property: 'param1' }],
+        // sorts: [{ direction: 'DESC', property: 'param1' }],
         capacity: pagination.pageSize,
         page: page,
       }).then(res => {
         this.loading = false
         this.list = res.records || []
         this.list.forEach(item => {
-          item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'
-          item.taskOrigin = 'WMS鑾峰彇'
-          item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�')
+          item.typeName = this.StoreTypeOps[item.type].name
         })
         this.pagination.total = res.total || 0
       }, () => {
@@ -144,7 +168,9 @@
       })
     },
     clear() {
-      this.filters = {}
+      this.filters = {
+        inOut: 1
+      }
       this.pagination.pageSize = 10
       this.pagination.page = 1
       this.getList()
diff --git a/admin/src/views/stock/query.vue b/admin/src/views/stock/query.vue
index e46add8..f93e7be 100644
--- a/admin/src/views/stock/query.vue
+++ b/admin/src/views/stock/query.vue
@@ -2,7 +2,7 @@
   <div class="main_app">
     <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
     <div class="mt20">
-      <el-button v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
+      <el-button @click="handleEx" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
     </div>
     <el-table v-loading="loading" :data="list" stripe>
       <el-table-column prop="materialId" label="璧勪骇缂栫爜" min-width="100" show-overflow-tooltip />
@@ -25,7 +25,7 @@
 import dayjs from 'dayjs'
 import duration from 'dayjs/plugin/duration'
 dayjs.extend(duration)
-import { fetchList } from '@/api/ywStock'
+import { ywStockPage,ywStockPageEx  } from '@/api/store/index'
 export default {
   components: {
     Pagination,
@@ -72,7 +72,7 @@
     getList(page) {
       const { pagination, filters } = this
       this.loading = true
-      fetchList({
+      ywStockPage({
         model: {
           ...filters
         },
@@ -86,6 +86,27 @@
         this.loading = false
       })
     },
+    handleEx() {
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.loading = true
+          ywStockPageEx({
+            page: this.pagination.page,
+            capacity: 1000000,
+            model: this.filters
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.loading = false
+            })
+        })
+        .catch(() => { })
+    },
     clear() {
       this.filters = {}
       this.pagination.pageSize = 10
diff --git a/admin/src/views/stock/record.vue b/admin/src/views/stock/record.vue
index f7f37f0..b3300bf 100644
--- a/admin/src/views/stock/record.vue
+++ b/admin/src/views/stock/record.vue
@@ -2,19 +2,35 @@
   <div class="main_app">
     <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
     <div class="mt20">
-      <el-button type="primary" @click="handleEx()" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
+      <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
     </div>
     <el-table v-loading="loading" :data="list" stripe>
-      <el-table-column prop="platformName" label="鍗曟嵁鏃ユ湡" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="platformName" label="璧勪骇缂栫爜" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="platformGroupName" label="璧勪骇鍚嶇О" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="carCodeFront" label="璧勪骇鍒嗙被" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="carCodeBack" label="鏁伴噺" min-width="80" show-overflow-tooltip />
-      <el-table-column prop="param1" label="绫诲瀷" min-width="80" show-overflow-tooltip />
-      <el-table-column prop="workTime" label="浠撳簱" min-width="90" show-overflow-tooltip />
-      <el-table-column prop="workTime" label="鍗曟嵁缂栧彿" min-width="120" show-overflow-tooltip />
-      <el-table-column prop="workTime" label="鍒涘缓浜�" min-width="80" show-overflow-tooltip />
-      <el-table-column prop="workTime" label="鍒涘缓鏃堕棿" min-width="140" show-overflow-tooltip />
+      <el-table-column prop="doneDate" label="鍗曟嵁鏃ユ湡" min-width="90" show-overflow-tooltip />
+      <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" min-width="90" show-overflow-tooltip />
+      <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" min-width="90" show-overflow-tooltip />
+      <el-table-column prop="carCodeFront" label="鐗╂枡鍒嗙被" min-width="120" show-overflow-tooltip>
+        <template v-slot="{ row }">
+          <span>{{ row.categoryParentName }}/{{ row.categoryName }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="carCodeBack" label="鏁伴噺" min-width="80" show-overflow-tooltip>
+        <template v-slot="{ row }">
+          <span>{{ row.stock }}{{ row.materialUnitName }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="param1" label="绫诲瀷" min-width="70" show-overflow-tooltip>
+        <template v-slot="{ row }">
+          <span v-if="row.type || row.type == 0">{{ StoreTypeOps[row.type] }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="warehouseName" label="浠撳簱" min-width="90" show-overflow-tooltip />
+      <el-table-column prop="code" label="鍗曟嵁缂栧彿" min-width="120" show-overflow-tooltip>
+        <template v-slot="{ row }">
+          <span class="primaryColor">{{ row.code }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="createUserName" label="鍒涘缓浜�" min-width="80" show-overflow-tooltip />
+      <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="140" show-overflow-tooltip />
     </el-table>
     <div class="mt20">
       <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
@@ -28,7 +44,9 @@
 import dayjs from 'dayjs'
 import duration from 'dayjs/plugin/duration'
 dayjs.extend(duration)
-import { platformLogPage, getPlatformGroupList } from '@/api'
+import { ywOutinboundRecord, ywOutinboundRecordEx } from '@/api'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
+import { StoreTypeOps } from './components/config'
 export default {
   components: {
     Pagination,
@@ -45,29 +63,34 @@
       filters: {},
       list: [],
       total: 0,
+      StoreTypeOps,
       queryFormConfig: {
         formItems: [
           {
-            filed: 'carCodeFront',
+            filed: 'materialCode',
             type: 'input',
-            label: '璧勪骇缂栫爜',
+            label: '鐗╂枡缂栫爜',
           },
           {
-            filed: 'platformGroupId',
+            filed: 'warehouseId',
             type: 'select',
+            labelCode: 'name',
+            valueCode: 'id',
             label: '鎵�鍦ㄤ粨搴�',
             options: []
           },
           {
-            filed: 'carCodeFront',
+            filed: 'code',
             type: 'input',
             label: '鍗曟嵁缂栧彿',
           },
           {
-            filed: 'platformGroupId',
+            filed: 'type',
             type: 'select',
             label: '鍗曟嵁绫诲瀷',
-            options: []
+            labelCode: 'name',
+            valueCode: 'id',
+            options: StoreTypeOps
           },
           {
             filed: 'selDate',
@@ -76,7 +99,7 @@
           },
           {
             filed: 'selTime',
-            type: 'daterange',
+            type: 'datetimerange',
             label: '鍒涘缓鏃堕棿',
           },
         ],
@@ -85,8 +108,8 @@
     }
   },
   created() {
-    // this.getList()
-    // this.getGroupList()
+    this.getList()
+    this.initData()
   },
   methods: {
     handleSub() {
@@ -96,39 +119,58 @@
         }
       })
     },
-    handleEx() { },
-    getGroupList() {
-      getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
-        this.queryFormConfig.formItems[1].options = res.map(i => {
-          return {
-            value: i.id,
-            label: i.name
-          }
+    handleEx() {
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.loading = true
+          ywOutinboundRecordEx({
+            page: this.pagination.page,
+            capacity: 1000000,
+            model: this.filters
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.loading = false
+            })
         })
-        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' })
+        .catch(() => { })
+    },
+    initData() {
+      getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => {
+        this.queryFormConfig.formItems[1].options = res.records || []
       })
     },
     getList(page) {
       const { pagination, filters } = this
       this.loading = true
-      platformLogPage({
+      if (filters.selDate && filters.selDate.length > 0) {
+        filters.doneDateStart = filters.selDate[0]
+        filters.doneDateEnd = filters.selDate[1]
+      } else {
+        filters.doneDateStart = null
+        filters.doneDateEnd = null
+      }
+      if (filters.selTime && filters.selTime.length > 0) {
+        filters.createDateStart = filters.selTime[0]
+        filters.createDateEnd = filters.selTime[1]
+      } else {
+        filters.createDateStart = null
+        filters.createDateEnd = null
+      }
+      ywOutinboundRecord({
         model: {
-          ...filters,
-          queryStatus: '6,7,8',
-          beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
-          beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
+          ...filters
         },
-        sorts: [{ direction: 'DESC', property: 'param1' }],
         capacity: pagination.pageSize,
         page: page || pagination.page,
       }).then(res => {
         this.loading = false
         this.list = res.records || []
-        this.list.forEach(item => {
-          item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'
-          item.taskOrigin = 'WMS鑾峰彇'
-          item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�')
-        })
         this.pagination.total = res.total || 0
       }, () => {
         this.loading = false

--
Gitblit v1.9.3