From 94de1745b4b69eeeb1ac8c5d3508ce87258afc25 Mon Sep 17 00:00:00 2001
From: haoyahui <2032914783@qq.com>
Date: 星期四, 16 十一月 2023 09:22:06 +0800
Subject: [PATCH] 库存管理

---
 admin-web/src/api/stock/transfer.js                               |   81 +
 admin-web/src/views/stock/transfer/transferissue/detail.vue       |  204 +-
 admin-web/src/styles/index.scss                                   |    4 
 admin-web/src/views/mixins/listPage.js                            |   91 +
 admin-web/src/views/stock/scrap/itemScrapping/edit.vue            |  157 +-
 admin-web/src/views/stock/transfer/transferApplication/index.vue  |  285 ++---
 admin-web/src/components/myButton/myButton.vue                    |    4 
 admin-web/src/views/stock/accessStock/outbound/detail.vue         |   22 
 admin-web/src/views/foundation/material/edit.vue                  |   10 
 admin-web/src/views/stock/accessStock/outbound/index.vue          |  183 ---
 admin-web/src/api/commonsApi.js                                   |    3 
 admin-web/src/views/stock/index.scss                              |   12 
 admin-web/src/views/stock/accessStock/outbound/edit.vue           |   89 
 admin-web/src/views/mixins/transfer.js                            |   34 
 admin-web/src/views/stock/procure/receiptDetails/index.vue        |    2 
 admin-web/src/views/stock/procure/purchaseOrder/index.vue         |   93 -
 admin-web/src/views/stock/transfer/transferApplication/edit.vue   |  296 ++---
 admin-web/src/views/stock/transfer/transferissue/index.vue        |  270 +---
 admin-web/src/utils/index.js                                      |   37 
 admin-web/src/views/stock/inventorycount/inventorytask/detail.vue |   73 +
 admin-web/src/views/stock/ledger/ledgerQuery/index.vue            |   10 
 admin-web/src/views/stock/procure/purchaseOrder/edit.vue          |  213 ++-
 /dev/null                                                         |  495 ---------
 admin-web/src/App.vue                                             |    2 
 admin-web/src/api/stock/accessStock.js                            |    9 
 admin-web/src/views/stock/transfer/transferApplication/detail.vue |  190 +-
 admin-web/src/views/stock/accessStock/outboundDetails/index.vue   |  236 +--
 27 files changed, 1,251 insertions(+), 1,854 deletions(-)

diff --git a/admin-web/src/App.vue b/admin-web/src/App.vue
index 0816b2f..a487bdd 100644
--- a/admin-web/src/App.vue
+++ b/admin-web/src/App.vue
@@ -9,3 +9,5 @@
   name: 'App',
 };
 </script>
+<style>
+</style>
diff --git a/admin-web/src/api/commonsApi.js b/admin-web/src/api/commonsApi.js
index d282bc2..927aaac 100644
--- a/admin-web/src/api/commonsApi.js
+++ b/admin-web/src/api/commonsApi.js
@@ -5,5 +5,8 @@
 
   //鏁版嵁瀛楀吀涓嬫媺绫�
   data_dict:"/admin/component/data_dict",
+  
+  //鏈烘瀯涓嬫媺绫�
+  cascader_tree_fin_tenant:"/pc/fin/sys/tenant/select/tree_fin_tenant",
 
 };
diff --git a/admin-web/src/api/stock/accessStock.js b/admin-web/src/api/stock/accessStock.js
index 12e3820..7a0135e 100644
--- a/admin-web/src/api/stock/accessStock.js
+++ b/admin-web/src/api/stock/accessStock.js
@@ -32,3 +32,12 @@
     params,
   });
 }
+// 鏄庣粏璇︽儏
+export function outputDtailList(params) {
+  return request({
+    url: '/pc/l/wh/form/output/detail/list',
+    method: 'get',
+    params,
+  });
+}
+
diff --git a/admin-web/src/api/stock/transfer.js b/admin-web/src/api/stock/transfer.js
new file mode 100644
index 0000000..e67fc14
--- /dev/null
+++ b/admin-web/src/api/stock/transfer.js
@@ -0,0 +1,81 @@
+import request from '@/utils/request';
+
+// 鍗曟嵁鏂板
+export function transferAdd(data) {
+  return request({
+    url: '/pc/l/wh/form/transfer/add',
+    method: 'post',
+    data,
+  });
+}
+// 鍒楄〃
+export function transferList(params) {
+  return request({
+    url: '/pc/l/wh/form/transfer/list',
+    method: 'get',
+    params,
+  });
+}
+
+// 鏌ヨ鐖剁骇鏈烘瀯
+export function getParentTenant(params) {
+  return request({
+    url: '/pc/fin/sys/tenant/get/parent/tenant',
+    method: 'get',
+    params,
+  });
+}
+// 鏌ヨ鐖剁骇鏈烘瀯涓嬬殑鐗╁搧
+export function queryWarehouseGoods(params) {
+  return request({
+    url: '/pc/base/goods/template/query/warehouse/goods',
+    method: 'get',
+    params,
+  });
+}
+
+// 璇︽儏
+export function transferDetail(params) {
+  return request({
+    url: '/pc/l/wh/form/transfer/detail',
+    method: 'get',
+    params,
+  });
+}
+
+
+// 鍑哄簱
+export function transferOutput(params) {
+  return request({
+    url: '/pc/l/wh/form/transfer/output',
+    method: 'post',
+    params,
+  });
+}
+
+// 鍏ュ簱
+export function transfeIncome(params) {
+  return request({
+    url: '/pc/l/wh/form/transfer/income',
+    method: 'post',
+    params,
+  });
+}
+
+// 鎾ら攢
+export function transferUpdStatus(params) {
+  return request({
+    url: '/pc/l/wh/form/transfer/updStatus',
+    method: 'post',
+    params,
+  });
+}
+
+// 瀵煎嚭
+export function transferExport(params) {
+  return request({
+    url: '/pc/l/wh/form/transfer/export',
+    method: 'get',
+    params,
+  });
+}
\ No newline at end of file
diff --git a/admin-web/src/components/myButton/myButton.vue b/admin-web/src/components/myButton/myButton.vue
index a37f4f4..72a7a82 100644
--- a/admin-web/src/components/myButton/myButton.vue
+++ b/admin-web/src/components/myButton/myButton.vue
@@ -343,8 +343,8 @@
       this.mySize = this.tools.size
       this.myPlain = this.tools.plain
       this.myType = this.tools.type
-      if (this.icons != null) {
-        this.myIcon = this.icons
+      if (this.icon != null) {
+        this.myIcon = this.icon
       } else {
         this.myIcon = this.tools.other[this.myName].icon
       }
diff --git a/admin-web/src/styles/index.scss b/admin-web/src/styles/index.scss
index e132428..070d2ba 100644
--- a/admin-web/src/styles/index.scss
+++ b/admin-web/src/styles/index.scss
@@ -328,3 +328,7 @@
 button{
   font-family: sans-serif!important;
 }
+
+.viewer-container{
+  z-index: 9999!important;
+}
\ No newline at end of file
diff --git a/admin-web/src/utils/index.js b/admin-web/src/utils/index.js
index fede7c7..c57d51a 100644
--- a/admin-web/src/utils/index.js
+++ b/admin-web/src/utils/index.js
@@ -1,4 +1,3 @@
-
 import Cookies from 'js-cookie';
 /**
  * Created by PanJiaChen on 16/11/18.
@@ -405,3 +404,39 @@
     return staff.some((item) => item.avatar === JavaInfo.account);
   }
 }
+
+// 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁�
+export function findParentIds(dataSource, nodeId) {
+  const parentIds = [nodeId]; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
+
+  // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣
+  function traverse(node, nodeId) {
+    if (node.id === nodeId) {
+      // 濡傛灉褰撳墠鑺傜偣鐨処D绛変簬瀛愯妭鐐圭殑ID锛屽垯琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣锛屽彲浠ュ紑濮嬪悜涓婃煡鎵剧埗鑺傜偣
+      return true; // 杩斿洖true琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
+    }
+
+    if (node.children) {
+      // 濡傛灉褰撳墠鑺傜偣鏈夊瓙鑺傜偣锛屽垯缁х画閬嶅巻瀛愯妭鐐�
+      for (const childNode of node.children) {
+        if (traverse(childNode, nodeId)) {
+          // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
+          parentIds.unshift(node.id);
+          return true;
+        }
+      }
+    }
+
+    return false; // 濡傛灉褰撳墠鑺傜偣涓嶆槸瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欒繑鍥瀎alse
+  }
+
+  // 浠庢牴鑺傜偣寮�濮嬮亶鍘嗘暣妫垫爲锛屽苟璋冪敤閫掑綊鍑芥暟鏌ユ壘瀛愯妭鐐圭殑鎵�鏈夌埗鑺傜偣
+  for (const node of dataSource) {
+    if (traverse(node, nodeId)) {
+      // 濡傛灉鍦ㄥ綋鍓嶈妭鐐圭殑瀛愭爲涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欑洿鎺ラ��鍑哄惊鐜�
+      break;
+    }
+  }
+
+  return parentIds; // 杩斿洖鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
+}
\ No newline at end of file
diff --git a/admin-web/src/views/foundation/material/edit.vue b/admin-web/src/views/foundation/material/edit.vue
index ae949f5..404a19d 100644
--- a/admin-web/src/views/foundation/material/edit.vue
+++ b/admin-web/src/views/foundation/material/edit.vue
@@ -40,6 +40,7 @@
 import winMd from '@/components/win/win-md'
 import myButton from '@/components/myButton/myButton'
 import * as finsystenant from '@/api/baseSetting/finsystenant'
+import {mapGetters} from 'vuex'
 
 export default {
   components: {winMd, myButton},
@@ -62,6 +63,8 @@
         states: 1,
         summary: '',
         categoryId: null,
+        agencyId:'',
+        agencyName:'',
         models:[
           {
             modelName:'',
@@ -76,11 +79,18 @@
       }
     }
   },
+  computed:{
+    ...mapGetters(['userInfo'])
+  },
   created() {
     this.tree_List()
     if(this.setting.info){
       this.formData = Object.assign({},JSON.parse(this.setting.info))
     }
+    if(!this.formData.agencyId) {
+      this.formData.agencyId = this.userInfo.tenantId
+      this.formData.agencyName = this.userInfo.tenantName
+    }
   },
   methods: {
     tree_List (){
diff --git a/admin-web/src/views/mixins/listPage.js b/admin-web/src/views/mixins/listPage.js
new file mode 100644
index 0000000..2db0160
--- /dev/null
+++ b/admin-web/src/views/mixins/listPage.js
@@ -0,0 +1,91 @@
+import * as DateFormatter from '@/utils/DateFormatter';
+import { mapGetters } from 'vuex';
+export default {
+    data() {
+        return {
+            loading: false,
+            list: [],
+            items:[],
+            filterFrom:{},
+            editSetting: {
+              title: '',
+              id: '',
+              orgId: '',
+              show: false,
+            },
+            detailSetting: {
+              title: '璇︽儏',
+              id: '',
+              show: false,
+            },
+            pageNum: 1,
+            pageSize: 10,
+            total: 0,
+        }
+    },
+    computed: {
+      ...mapGetters(['userInfo']),
+      clientHeight() {
+        return document.documentElement.clientHeight;
+      },
+    },
+    created() {
+      this.fetchData();
+    },
+    filters: {
+      formatTime(time) {
+        if (!time) return '-';
+        return DateFormatter.LongToDateTime(time);
+      },
+    },
+    methods:{
+        fetchData() {},
+        // 瀵煎嚭
+        handleExport() {},
+        // 鏂板
+        handleAdd() {
+          this.editSetting.id = null;
+          this.editSetting.info = null;
+          this.editSetting.title = '鏂板';
+          this.editSetting.show = true;
+        },
+        // 缂栬緫
+        handleEdit(row) {
+          this.editSetting.id = row.id;
+          this.editSetting.info = null;
+          this.editSetting.title = '缂栬緫';
+          this.editSetting.show = true;
+        },
+        // 璇︽儏
+        handleDetail(row) {
+          this.detailSetting.id = row.id;
+          this.detailSetting.title = '璇︽儏';
+          this.detailSetting.show = true;
+        },
+        // 鍒嗛〉
+        handleSizeChange(pageSize) {
+          this.pageSize = pageSize;
+          this.search({ pageNum: 1 });
+        },
+        handleCurrentChange(pageNum) {
+          this.pageNum = pageNum;
+          this.search();
+        },
+        // 鏌ヨtable鍒楄〃
+        search(pageNum) {
+          if(pageNum){
+            this.pageNum = pageNum
+          }
+          this.fetchData();
+        },
+        refreshData() {
+          this.pageNum = 1;
+          this.pageSize = 10;
+          this.search();
+        },
+        fifterForm(params) {
+          this.filterFrom = Object.assign(this.filterFrom, params);
+          this.search(1);
+        },
+    }
+}
\ No newline at end of file
diff --git a/admin-web/src/views/mixins/transfer.js b/admin-web/src/views/mixins/transfer.js
new file mode 100644
index 0000000..407a297
--- /dev/null
+++ b/admin-web/src/views/mixins/transfer.js
@@ -0,0 +1,34 @@
+export default {
+    data() {
+        return {
+            statesOptions:[
+                {
+                  label: '鍏ㄩ儴',
+                  value: '',
+                },
+                {
+                  label: '寰呭嚭搴�',
+                  value: '0',
+                },
+                {
+                  label: '寰呮帴鏀�',
+                  value: '1',
+                },
+                {
+                  label: '宸叉帴鏀�',
+                  value: '2',
+                },
+                {
+                  label: '宸叉挙閿�',
+                  value: '4',
+                },
+              ]
+        }
+    },
+    methods:{
+      getStatesLabel(value) {
+        let item = this.statesOptions.find(v=>v.value==value)
+        return item ? item.label : ''
+      }
+    }
+}
\ No newline at end of file
diff --git a/admin-web/src/views/stock/accessStock/outbound/detail.vue b/admin-web/src/views/stock/accessStock/outbound/detail.vue
index cb6d618..0e6994e 100644
--- a/admin-web/src/views/stock/accessStock/outbound/detail.vue
+++ b/admin-web/src/views/stock/accessStock/outbound/detail.vue
@@ -17,28 +17,28 @@
     <el-row :gutter="20" style="margin-top: 20px">
       <el-col :span="8">
         <span>鍒涘缓浜猴細</span>
-        <span>{{ detail.buyerName }}</span>
+        <span>{{ detail.operatorName }}</span>
       </el-col>
       <el-col :span="8">
         <span>鍑哄簱鏃堕棿锛�</span>
-        <span>{{ detail.incomeTime | formatTime }}</span>
+        <span>{{ detail.dealTime | formatTime }}</span>
       </el-col>
     </el-row>
-    <el-row :gutter="20" style="margin-top: 20px">
+    <el-row v-if="detail.procureDoc" :gutter="20" style="margin-top: 20px">
       <el-col class="img-row" :span="24">
         <span>鍑哄簱鎵嬬画锛�</span>
         <div class="img-box"></div>
       </el-col>
     </el-row>
-    <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.goods" :key="goodsIndex">
+    <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.fromOutputGoods" :key="goodsIndex">
       <el-row :gutter="20">
         <el-col :span="8">
           <span>鐗╁搧鍒嗙被锛�</span>
-          <span>{{ goodsItem.baseCategoryName }}</span>
+          <span>{{ goodsItem.categoryName }}</span>
         </el-col>
         <el-col :span="8">
           <span>鐗╁搧鍚嶇О锛�</span>
-          <span>{{ goodsItem.goodsTemplateName }}</span>
+          <span>{{ goodsItem.goodsName }}</span>
         </el-col>
       </el-row>
       <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px">
@@ -83,14 +83,14 @@
   data() {
     return {
       detail: {
-        baseCategoryName: '',
+        categoryName: '',
         businessFormCode: '',
-        goodsTemplateName: '',
+        goodsName: '',
         agencyId: '',
         agencyName: '',
         states: '',
         createName: '',
-        goods: [],
+        fromOutputGoods: [],
       },
     };
   },
@@ -106,7 +106,9 @@
     });
   },
   methods: {
-    close() {},
+    close() {
+      this.$emit('close')
+    },
   },
 };
 </script>
diff --git a/admin-web/src/views/stock/accessStock/outbound/edit.vue b/admin-web/src/views/stock/accessStock/outbound/edit.vue
index fce80a0..064fcf2 100644
--- a/admin-web/src/views/stock/accessStock/outbound/edit.vue
+++ b/admin-web/src/views/stock/accessStock/outbound/edit.vue
@@ -56,11 +56,7 @@
               <el-form-item
                 label="鐗╁搧鍚嶇О"
                 :prop="`goods[${goodsIndex}].baseGoodsTemplateId`"
-                :rules="{
-                  required: true,
-                  message: '璇烽�夋嫨',
-                  trigger: 'change',
-                }"
+                :rules="rules.baseGoodsTemplateId"
               >
                 <el-select
                   v-model="goodsItem.baseGoodsTemplateId"
@@ -128,11 +124,18 @@
             </el-table-column>
             <el-table-column prop="counts" label="鍑哄簱鏁伴噺" align="center">
               <template slot-scope="scope">
+                <el-form-item
+                  label-width="0"
+                  style="margin-bottom: 0"
+                  :prop="`goods[${goodsIndex}].models[${scope.$index}].counts`"
+                  :rules="rules.counts"
+                >
                 <el-input
                   type="number"
                   v-model="scope.row.counts"
                   @change="countsChange($event, goodsIndex,scope.$index)"
                 ></el-input>
+                </el-form-item>
               </template>
             </el-table-column>
           </el-table>
@@ -180,8 +183,7 @@
 import winMd from '@/components/win/win-md';
 import upload from '@/components/upload/index';
 import { getUploadUrl } from '@/utils/base';
-
-import SettingIplatform from '../../../../../public/static/config';
+import {mapGetters} from 'vuex'
 
 export default {
   components: { MyButton, winMd, upload },
@@ -192,6 +194,18 @@
     },
   },
   data() {
+    // 鑷畾涔夋牎楠�
+    // 鐗╁搧閲嶅鏍¢獙
+    var checkGoodsTemplateId = (rule, value, callback) => {
+      if (!value) {
+        return callback(new Error('璇烽�夋嫨'));
+      }
+      let temp = this.formData.goods.filter((v) => v.baseGoodsTemplateId == value);
+      if (!temp || temp.length!=1) {
+        return callback(new Error('宸查�夎繃姝ょ墿鍝�'));
+      }
+      callback();
+    };
     return {
       loading: false,
       warehouseOptions: [], // 鍑哄簱浠撳簱鍒楄〃
@@ -216,7 +230,7 @@
       modelsItem: {
         baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿
         worehouseCount: 0,
-        counts: 0, // 鎿嶄綔鏁伴噺
+        counts: null, // 鎿嶄綔鏁伴噺
         unit: null, //鍗曚綅
       },
       rules: {
@@ -224,10 +238,10 @@
         dealTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
         buyType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
 
-        procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }],
         baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        baseGoodsTemplateId: [{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }],
         modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        counts: [{ required: true, message: '璇疯緭鍏�', trigger: 'change' }],
       },
 
       uploadSettings: {
@@ -243,6 +257,9 @@
       },
     };
   },
+  computed:{
+    ...mapGetters(['userInfo'])
+  },
   created() {
     this.init();
   },
@@ -254,14 +271,16 @@
       // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃
       const treeRes = await getTree();
       this.categoryOptions = this.removeEmptyChildren(treeRes);
-      this.formData.goods.push(JSON.parse(JSON.stringify(this.goodsItem)));
     },
 
     // 鑾峰彇鍑哄簱浠撳簱鍒楄〃
     getWarehouseList() {
-      selectTenantWarehouse()
+      selectTenantWarehouse({agencyId:this.userInfo.tenantId})
         .then((res) => {
-          this.warehouseOptions = res;
+          this.warehouseOptions = res
+          if(res.length) {
+            this.formData.goods.push(JSON.parse(JSON.stringify(this.goodsItem)));
+          }
           if (this.warehouseOptions.length && !this.formData.warehouseId) {
             // 榛樿閫変腑绗竴涓粨搴�
             this.formData.warehouseId = this.warehouseOptions[0].id;
@@ -337,7 +356,7 @@
       this.getgoodsTemplate(e[e.length - 1], index);
     },
 
-    // 鐗╁搧鍚嶇О鍒楄〃
+    // 鐗╁搧鍚嶇О鍒楄〃閫夋嫨
     goodsTemplateChange(e, index) {
       this.formData.goods[index].modelsOptions = [];
       this.formData.goods[index].modelsIds = [];
@@ -390,9 +409,13 @@
     countsChange(e, goodsIndex,index) {
       const curItem = this.formData.goods[goodsIndex].models[index]
       const worehouseCount = curItem.worehouseCount
+      if (e == 0) {
+        this.$message.warning('鏁伴涓嶈兘涓�0');
+        curItem.counts = null
+      }
       if (e > worehouseCount) {
         this.$message.warning('鏁伴瓒呰繃鐜版湁搴撳瓨');
-        curItem.counts = worehouseCount
+        curItem.counts = worehouseCount > 0 ? worehouseCount : null
       }
     },
 
@@ -424,42 +447,6 @@
         goods: [],
       };
       this.$emit('close');
-    },
-
-    // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁�
-    findParentIds(dataSource, nodeId) {
-      const parentIds = []; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
-
-      // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣
-      function traverse(node, nodeId) {
-        if (node.id === nodeId) {
-          // 濡傛灉褰撳墠鑺傜偣鐨処D绛変簬瀛愯妭鐐圭殑ID锛屽垯琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣锛屽彲浠ュ紑濮嬪悜涓婃煡鎵剧埗鑺傜偣
-          return true; // 杩斿洖true琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
-        }
-
-        if (node.children) {
-          // 濡傛灉褰撳墠鑺傜偣鏈夊瓙鑺傜偣锛屽垯缁х画閬嶅巻瀛愯妭鐐�
-          for (const childNode of node.children) {
-            if (traverse(childNode, nodeId)) {
-              // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
-              parentIds.push(node.id);
-              return true;
-            }
-          }
-        }
-
-        return false; // 濡傛灉褰撳墠鑺傜偣涓嶆槸瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欒繑鍥瀎alse
-      }
-
-      // 浠庢牴鑺傜偣寮�濮嬮亶鍘嗘暣妫垫爲锛屽苟璋冪敤閫掑綊鍑芥暟鏌ユ壘瀛愯妭鐐圭殑鎵�鏈夌埗鑺傜偣
-      for (const node of dataSource) {
-        if (traverse(node, nodeId)) {
-          // 濡傛灉鍦ㄥ綋鍓嶈妭鐐圭殑瀛愭爲涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欑洿鎺ラ��鍑哄惊鐜�
-          break;
-        }
-      }
-
-      return parentIds; // 杩斿洖鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
     },
   },
 };
diff --git a/admin-web/src/views/stock/accessStock/outbound/index.vue b/admin-web/src/views/stock/accessStock/outbound/index.vue
index 30595e1..32d8b6a 100644
--- a/admin-web/src/views/stock/accessStock/outbound/index.vue
+++ b/admin-web/src/views/stock/accessStock/outbound/index.vue
@@ -32,15 +32,15 @@
                         </div>
                       </div>
                       <div class="one-hed">
-                        <div class="box"><span class="span-two">鏈烘瀯锛�</span>{{ item.agencyId }}</div>
-                        <div class="box"><span class="span-two">鎿嶄綔浜猴細</span>{{ item.buyerName }}</div>
+                        <div class="box"><span class="span-two">鏈烘瀯锛�</span>{{ item.agencyName }}</div>
+                        <div class="box"><span class="span-two">鎿嶄綔浜猴細</span>{{ item.operatorName }}</div>
                         <div class="box">
-                          <span class="span-two">鍑哄簱鏃堕棿锛�</span>{{ item.procureTime | formatTime }}
+                          <span class="span-two">鍑哄簱鏃堕棿锛�</span>{{ item.dealTime | formatTime }}
                         </div>
                       </div>
                       <div class="card-end">
-                        <div v-for="(just, index) in item.fromProcureTemplateInfoList" :key="index" class="item">
-                          <div class="name">{{ just.goodsTemplateName }}</div>
+                        <div v-for="(just, index) in item.formOutputTemplateInfoList" :key="index" class="item">
+                          <div class="name">{{ just.goodsName }}</div>
                           <div class="value-box">
                             <div class="value-box-item">
                               <span class="label">鏁伴噺锛�</span>
@@ -72,32 +72,24 @@
     </el-container>
     <!--娣诲姞/缂栬緫寮圭獥-->
     <edit v-if="editSetting.show" :setting="editSetting" ref="editRef" @close="editSetting.show=false" @search="refreshData"></edit>
-    <detail v-if="detailSetting.show" :setting="detailSetting" @close="editSetting.show=false" ref="detailRef"></detail>
-    <my-import
-      :import-setting="importSetting"
-      :dialog-show="importSetting.dialogShow"
-      :dialog-title="importSetting.dialogTitle"
-    />
+    <detail v-if="detailSetting.show" :setting="detailSetting" @close="detailSetting.show=false" ref="detailRef"></detail>
   </div>
 </template>
 
 <script>
-import { outputList, procureDel, procureIncome } from '@/api/stock/accessStock';
+import { outputList } from '@/api/stock/accessStock';
 import MyButton from '@/components/myButton/myButton';
-import SettingIplatform from '@/utils/settingIplatform';
 import myImport from '@/views/components/myImport';
 import edit from './edit';
 import detail from './detail';
-import { getBaseUrl } from '@/utils/base';
-import * as DateFormatter from '@/utils/DateFormatter';
+import listPage from '../../../mixins/listPage'
 
 export default {
   name: 'index',
+  mixins: [listPage],
   components: { MyButton, myImport, edit, detail },
   data() {
     return {
-      loading: false,
-      adddialog: false,
       list: [],
       // 鎼滅储妗�
       items: [
@@ -110,7 +102,7 @@
         },
         {
           type: 'text',
-          dataIndex: 'goodsTemplateName',
+          dataIndex: 'goodsName',
           label: '鐗╁搧鍚嶇О',
           placeholder: '鍙ā绯婃悳绱�',
           defaultValue: '',
@@ -126,81 +118,25 @@
         },
         {
           type: 'text',
-          dataIndex: 'buyerName',
+          dataIndex: 'createName',
           label: '鍒涘缓浜�',
           placeholder: '璇疯緭鍏�',
           defaultValue: '',
         },
         {
           type: 'date-picker',
-          dataIndex: 'val1',
+          dataIndex: 'startTime',
           label: '鍑哄簱鏃堕棿',
           defaultValue: '',
         },
         {
           type: 'date-picker',
-          dataIndex: 'val2',
+          dataIndex: 'endTime',
           label: '鑷�',
           defaultValue: '',
         },
       ],
-      // 鏍戞暟鎹�
-      treeDataList: [],
-      // 鎼滅储鏉′欢
-      filterFrom: {
-        tenantId: null,
-        userName: null,
-        userPhone: null,
-        states: null,
-      },
-      // 瀵煎叆
-      importSetting: {
-        dialogTitle: '瀵煎叆',
-        dialogShow: false,
-        fileSettings: {
-          data: {},
-          uploadUrl: getBaseUrl() + '/pc/fin/sys/tenant/import', // 涓婁紶鍦板潃
-          accept: '.xls', // 鏍煎紡
-          type: 'text', // 鍥炴樉褰㈠紡
-          loading: false, // 瀵煎叆鏁堟灉
-        },
-        /* 妯℃澘涓嬭浇 */
-        templateSettings: {
-          templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О
-          templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate', // 涓嬭浇鍦板潃
-        },
-        onSuccess: null,
-      },
-      editSetting: {
-        title: '',
-        id: '',
-        orgId: '',
-        show: false,
-      },
-      detailSetting: {
-        title: '璇︽儏',
-        id: '',
-        show: false,
-      },
-      pageNum: 1,
-      pageSize: 10,
-      total: 0,
     };
-  },
-  computed: {
-    clientHeight() {
-      return document.documentElement.clientHeight;
-    },
-  },
-  filters: {
-    formatTime(time) {
-      if (!time) return;
-      return DateFormatter.LongToDateTime(time);
-    },
-  },
-  created() {
-    this.fetchData();
-
   },
   methods: {
     fetchData() {
@@ -213,101 +149,20 @@
         this.list = res.datas;
         this.total = res.totalRows;
         this.loading = false;
-        console.log(this.list);
       });
-    },
-    //瀵煎叆
-    importOrg() {
-      this.importSetting.dialogShow = true;
-      this.importSetting.onSuccess = (response, callBack) => {
-        if (response.code === 1) {
-          this.$message.success(response.msg);
-          this.search(1);
-        } else {
-          this.$message.warning(response.msg);
-        }
-        callBack();
-      };
-    },
-    // 瀵煎嚭
-    handleExport() {},
-    // 鏂板
-    handleAdd() {
-      this.editSetting.id = null;
-      this.editSetting.info = null;
-      this.editSetting.title = '鏂板';
-      this.editSetting.show = true;
-    },
-    // 缂栬緫
-    handleEdit(row) {
-      this.editSetting.id = row.id;
-      this.editSetting.info = null;
-      this.editSetting.title = '缂栬緫';
-      this.editSetting.show = true;
-    },
-    // 璇︽儏
-    handleDetail(row) {
-      this.detailSetting.id = row.id;
-      this.detailSetting.info = JSON.stringify(row);
-      this.detailSetting.title = '璇︽儏';
-      this.detailSetting.show = true;
-    },
-    // 鍑哄簱
-    handleIncome(row) {
-      this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode}  鍑哄簱鍚�?`, '鍑哄簱鍑哄簱')
-        .then(function () {
-          procureIncome({ id: row.id }).then((res) => {
-            this.$message.success('鍑哄簱鎴愬姛锛�');
-            this.search();
-          });
-        })
-        .catch(() => {});
-    },
-    del(row) {
-      this.$modal
-        .confirm('鏄惁纭鍒犻櫎鍑哄簱鍗曞彿涓�"' + row.businessFormCode + '"鐨勬暟鎹悧锛�')
-        .then(function () {
-          procureDel({ id: row.id }).then((res) => {});
-        })
-        .then((res) => {
-          this.$message.success('鍒犻櫎鎴愬姛锛�');
-          this.search();
-        })
-        .catch(() => {});
-    },
-    // 鍒嗛〉
-    handleSizeChange(pageSize) {
-      this.pageSize = pageSize;
-      this.search({ pageNum: 1 });
-    },
-    handleCurrentChange(pageNum) {
-      this.pageNum = pageNum;
-      this.search();
-    },
-    // 鏌ヨtable鍒楄〃
-    search(pageNum) {
-      if(pageNum){
-        this.pageNum = pageNum
-      }
-      this.fetchData();
-    },
-    refreshData() {
-      this.pageNum = 1;
-      this.pageSize = 10;
-      this.search();
     },
     fifterForm(params) {
       this.filterFrom = Object.assign(this.filterFrom, params);
-      if (this.filterFrom.incomeTimeStart) {
-        this.filterFrom.incomeTimeStart = this.filterFrom.incomeTimeStart.replace(/\-/g, '');
+      if (this.filterFrom.startTime) {
+        this.filterFrom.startTime = this.filterFrom.startTime.replace(/\-/g, '');
       }
-      if (this.filterFrom.incomeTimeEnd) {
-        this.filterFrom.incomeTimeEnd = this.filterFrom.incomeTimeEnd.replace(/\-/g, '');
+      if (this.filterFrom.endTime) {
+        this.filterFrom.endTime = this.filterFrom.endTime.replace(/\-/g, '');
       }
-      if (this.filterFrom.agencyId.length) {
+      if (this.filterFrom.agencyId&&this.filterFrom.agencyId.length) {
         this.filterFrom.agencyId = this.filterFrom.agencyId[this.filterFrom.agencyId.length - 1];
       }
-      this.search({ pageNum: 1 });
+      this.search(1);
     },
   },
 };
diff --git a/admin-web/src/views/stock/accessStock/outboundDetails/index.vue b/admin-web/src/views/stock/accessStock/outboundDetails/index.vue
index 29e6efc..e94ddb1 100644
--- a/admin-web/src/views/stock/accessStock/outboundDetails/index.vue
+++ b/admin-web/src/views/stock/accessStock/outboundDetails/index.vue
@@ -10,72 +10,66 @@
           <el-row style="margin-top: 15px">
             <el-col>
               <!--鍒楄〃-->
-              <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/>
+              <my-table-v2 ref="myTable" :filter="filterFrom" :table="table" />
             </el-col>
           </el-row>
           <!--娣诲姞/缂栬緫寮圭獥-->
-          <detail v-if="detailSetting.show" :setting="detailSetting" @close="detailSetting.show = false"/>
+          <detail v-if="detailSetting.show" :setting="detailSetting" @close="detailSetting.show = false" />
         </el-card>
       </el-container>
     </el-container>
-    <my-import
-      :import-setting="importSetting"
-      :dialog-show="importSetting.dialogShow"
-      :dialog-title="importSetting.dialogTitle"
-    />
   </div>
 </template>
 
 <script>
-import MyTableV2 from "@/components/myTable/myTableV2";
-import MyButton from "@/components/myButton/myButton";
+import MyTableV2 from '@/components/myTable/myTableV2';
+import MyButton from '@/components/myButton/myButton';
 import SettingIplatform from '@/utils/settingIplatform';
-import detail from '../outbound/detail'
-import * as finsystenant from '@/api/baseSetting/finsystenant'
-import myImport from '@/views/components/myImport'
-import {getBaseUrl} from '@/utils/base';
+import detail from '../outbound/detail';
+import * as finsystenant from '@/api/baseSetting/finsystenant';
+import myImport from '@/views/components/myImport';
+import { goodsTemplate, goodsModel } from '@/api/baseSetting/finsystenant';
+import { outputDtailList } from '@/api/stock/accessStock';
 
 export default {
-  name: "index",
-  components: {MyButton, MyTableV2, detail, myImport},
+  name: 'index',
+  components: { MyButton, MyTableV2, detail, myImport },
   data() {
     return {
       // 鎼滅储妗�
       items: [
         {
           type: 'text',
-          dataIndex: 'name',
+          dataIndex: 'businessFormId',
           label: '鍗曞彿',
           placeholder: '璇疯緭鍏�',
-          defaultValue: ''
+          defaultValue: '',
         },
         {
           type: 'select',
-          dataIndex: 'status',
+          dataIndex: 'thisType',
           label: '绫诲瀷',
           placeholder: '璇烽�夋嫨',
-          defaultValue: '1',
-          options: [
-            {
-              label: '鍚敤',
-              value: '1'
-            },
-            {
-              label: '绂佺敤',
-              value: '0'
-            }
-          ]
-        },
-        {
-          type: 'text',
-          dataIndex: 'name',
-          label: '鐗╁搧鍚嶇О',
-          placeholder: '璇疯緭鍏�',
-          defaultValue: ''
+          defaultValue: '',
+          options: [{
+            label:'閲囪喘鍏ュ簱',
+            value:1
+          },{
+            label:'閫�杩樺叆搴�',
+            value:2
+          }],
         },
         {
           type: 'select',
-          dataIndex: 'modelsIds',
+          dataIndex: 'goodsTemplateId',
+          label: '鐗╁搧鍚嶇О',
+          placeholder: '璇烽�夋嫨',
+          defaultValue: '',
+          options: [],
+        },
+        {
+          type: 'select',
+          dataIndex: 'baseGoodsModelsId',
           label: '瑙勬牸鍨嬪彿',
           placeholder: '璇烽�夋嫨',
           defaultValue: '',
@@ -92,10 +86,22 @@
         },
         {
           type: 'text',
-          dataIndex: 'name',
+          dataIndex: 'createdName',
           label: '鍒涘缓浜�',
           placeholder: '璇疯緭鍏�',
-          defaultValue: ''
+          defaultValue: '',
+        },
+        {
+          type: 'date-picker',
+          dataIndex: 'dealTimeStart',
+          label: '鏃堕棿',
+          defaultValue: '',
+        },
+        {
+          type: 'date-picker',
+          dataIndex: 'dealTimeEnd',
+          label: '鑷�',
+          defaultValue: '',
         },
       ],
       // 鏍戞暟鎹�
@@ -105,25 +111,7 @@
         tenantId: null,
         userName: null,
         userPhone: null,
-        status: 1
-      },
-      // 瀵煎叆
-      importSetting: {
-          dialogTitle: '瀵煎叆',
-          dialogShow: false,
-          fileSettings: {
-              data: {},
-              uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 涓婁紶鍦板潃
-              accept: '.xls', // 鏍煎紡
-              type: 'text', // 鍥炴樉褰㈠紡
-              loading: false // 瀵煎叆鏁堟灉
-          },
-          /* 妯℃澘涓嬭浇 */
-          templateSettings: {
-              templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О
-              templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 涓嬭浇鍦板潃
-          },
-          onSuccess: null
+        status: 1,
       },
       editSetting: {
         title: '',
@@ -140,30 +128,31 @@
       table: {
         showIndex: true, // 鏄惁鏄剧ず搴忓彿
         expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁
-        url: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/list', // 璇锋眰鍦板潃
+        url: SettingIplatform.apiBaseURL + '/pc/l/wh/form/output/detail/list', // 璇锋眰鍦板潃
         // 宸ュ叿鏉�
         tools: {
-          columnsCtrl: {// 鍒楁帶鍒舵寜閽�
-            show: false
+          columnsCtrl: {
+            // 鍒楁帶鍒舵寜閽�
+            show: false,
           },
-          generalExport: {// 閫氱敤瀵煎嚭鎸夐挳
-            show: false
+          generalExport: {
+            // 閫氱敤瀵煎嚭鎸夐挳
+            show: false,
           },
           // 鑷畾涔夊伐鍏锋潯鎸夐挳
-          custom: [
-          ]
+          custom: [],
         },
         // 鍒椾俊鎭�
         columns: [
-          {title: '绫诲瀷', field: 'name', align: 'left',},
-          {title: '鍗曞彿', field: 'code', align: 'center'},
-          {title: '鐗╁搧鍚嶇О', field: 'lv', align: 'center', },
-          {title: '瑙勬牸鍨嬪彿', field: 'lv', align: 'center', },
-          {title: '鍑哄叆搴撴暟閲�', field: 'summary', align: 'left',},
-          {title: '閲戦', field: 'summary', align: 'left',},
-          {title: '鎵�灞炴満鏋�', field: 'summary', align: 'left',},
-          {title: '鍒涘缓浜�', field: 'summary', align: 'left',},
-          {title: '鎿嶄綔鏃堕棿', field: 'summary', align: 'left',},
+          { title: '绫诲瀷', field: 'thisType', align: 'left' },
+          { title: '鍗曞彿', field: 'businessFormId', align: 'center' },
+          { title: '鐗╁搧鍚嶇О', field: 'goodsTemplateName', align: 'center' },
+          { title: '瑙勬牸鍨嬪彿', field: 'baseGoodsModelsName', align: 'center' },
+          { title: '鍑哄叆搴撴暟閲�', field: 'thisCount', align: 'left' },
+          { title: '閲戦', field: 'totalPrice', align: 'left' },
+          { title: '鎵�灞炴満鏋�', field: 'agencyName', align: 'left' },
+          { title: '鍒涘缓浜�', field: 'createdName', align: 'left' },
+          { title: '鎿嶄綔鏃堕棿', field: 'dealTime', align: 'left' },
         ],
         // 鎿嶄綔淇℃伅
         operation: {
@@ -185,69 +174,36 @@
             small: false,
             pageNum: 1,
             pageSize: 10,
-            total: 0
-          }
-        }
+            total: 0,
+          },
+        },
       },
-    }
+    };
   },
   created() {
-    // 鑾峰彇鏈烘瀯鏍�
-    this.initTreeData()
+    this.initSearch();
   },
   methods: {
-    //瀵煎叆
-    importOrg() {
-        this.importSetting.dialogShow = true
-        this.importSetting.onSuccess = (response, callBack) => {
-            if (response.code===1){
-              this.$message.success(response.msg)
-              this.search(1)
-            }else{
-              this.$message.warning(response.msg)
-            }
-            callBack()
-        }
-    },
-    // 宸︿晶鏍戝垵濮嬪寲
-    initTreeData() {
-      finsystenant.getTree().then(res => {
-        const content = res || []
-        this.treeDataList.splice(0, this.treeDataList.length)
-        this.treeDataList = content
-        if (content.length > 0) {
-          this.importSetting.fileSettings.data = {pid: content[0].id}
-        }
-      })
-    },
-    updState(row) {
-      let vm = this
-      let text = row.status == 0 ? "鍚敤" : "绂佺敤";
-      vm.$modal.confirm('纭瑕�' + text + '"' + row.name + '"鍚楋紵').then(function () {
-        let params = Object.assign({}, row)
-        params.status = row.status == 1 ? 0 : 1
-        finsystenant.edit(params).then(res => {
-          if (res) {
-            row.status = row.status === 1 ? 0 : 1
-            vm.$modal.msgSuccess(text + "鎴愬姛");
-            vm.search()
-          }
-        })
-      })
-    },
-    del(row) {
-      this.$modal
-        .confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.name + '"鐨勬満鏋勫悧锛�')
-        .then(function () {
-          finsystenant.del({id: row.id}).then((res) => {
+    initSearch() {
+      this.items.map(async (item) => {
+        if (item.label == '鐗╁搧鍚嶇О') {
+          let res = await goodsTemplate();
+          item.options = res.map((v) => {
+            v.label = v.goodsName;
+            v.value = v.id;
+            return v;
           });
-        })
-        .then((res) => {
-          this.$message.success('鍒犻櫎鎴愬姛锛�');
-          this.search()
-        })
-        .catch(() => {
-        });
+        }
+        if (item.label == '瑙勬牸鍨嬪彿') {
+          let res = await goodsModel();
+          item.options = res.map((v) => {
+            v.label = v.modelName;
+            v.value = v.id;
+            return v;
+          });
+        }
+        return item;
+      });
     },
     showDetail(row) {
       this.detailSetting.id = row.id;
@@ -258,19 +214,17 @@
     // 鏌ヨtable鍒楄〃
     search(pageNum) {
       if (pageNum != undefined) {
-        this.$refs.myTable.search(pageNum)
+        this.$refs.myTable.search(pageNum);
       } else {
-        this.$refs.myTable.search()
+        this.$refs.myTable.search();
       }
     },
     fifterForm(params) {
-      this.filterFrom = Object.assign(this.filterFrom, params)
-      this.search(1)
-    }
-  }
-}
+      this.filterFrom = Object.assign(this.filterFrom, params);
+      this.search(1);
+    },
+  },
+};
 </script>
 
-<style scoped>
-
-</style>
+<style scoped></style>
diff --git a/admin-web/src/views/stock/index.scss b/admin-web/src/views/stock/index.scss
index 2e75344..1d33fb1 100644
--- a/admin-web/src/views/stock/index.scss
+++ b/admin-web/src/views/stock/index.scss
@@ -47,7 +47,7 @@
           text-align: center;
           border-radius: 4px;
           border: 1px solid #f9675b99;
-          background: #f9675b1a;
+          background: rgba($color:#f9675b99,$alpha:0.1);
           font-family: 'Microsoft YaHei';
           color: #f9675b;
           font-size: 13px;
@@ -57,13 +57,18 @@
         }
         .states-success {
           border: 1px solid #39ad6199;
-          background: #39ad610f;
+          background: rgba($color:#39ad6199,$alpha:0.1);
           color: #39ad61;
         }
         .states-info {
           border: 1px solid #999999;
-          background: #39ad610f;
+          background: rgba($color:#999999,$alpha:0.1);
           color: #999999;
+        }
+        .states-warning {
+          border: 1px solid #e6a23c;
+          background: rgba($color:#e6a23c,$alpha:0.1);
+          color: #e6a23c;
         }
       }
       .one-hed {
@@ -127,6 +132,7 @@
 .no-data{
   margin-top: 100px;
   text-align: center;
+  color: #909399;
 }
 
 /*缂栬緫*/
diff --git a/admin-web/src/views/stock/inventorycount/inventorytask/detail.vue b/admin-web/src/views/stock/inventorycount/inventorytask/detail.vue
new file mode 100644
index 0000000..1f26174
--- /dev/null
+++ b/admin-web/src/views/stock/inventorycount/inventorytask/detail.vue
@@ -0,0 +1,73 @@
+<template>
+  <win-md :title="setting.title" @close="close" :width="'1200px'">
+    <el-row :gutter="20" style="margin-bottom: 20px" type="flex" align="middle">
+      <el-col :span="6">鐩樼偣鍗曞彿锛歿{ formData.businessFormCode }}</el-col>
+      <el-col :span="6">鐩樼偣浠诲姟锛歿{ formData.businessTaskCode }}</el-col>
+      <el-col :span="6">鐩樼偣浠撳簱锛歿{ formData.warehouseId }}</el-col>
+    </el-row>
+    <el-table v-loading="loading" :data="formData.tableData" height="100%" :stripe="true" class="the-table">
+      <el-table-column prop="goodsTemplateName" label="鐗╁搧鍚嶇О"> </el-table-column>
+      <el-table-column prop="baseGoodsModelsId" label="鍨嬪彿" align="center"> </el-table-column>
+      <el-table-column prop="classification" label="璐疆鏃ユ湡"> </el-table-column>
+      <el-table-column prop="unit" label="浣跨敤閮ㄩ棬" align="center"> </el-table-column>
+      <el-table-column prop="kc" label="浣跨敤浜�" align="center"> </el-table-column>
+      <el-table-column prop="price" label="鍗曚环" align="center"> </el-table-column>
+      <el-table-column prop="inventoryResult" label="閲戦" align="center"> </el-table-column>
+      <el-table-column prop="inventoryCounts" label="搴旂洏鏁伴噺" align="center"></el-table-column>
+      <el-table-column prop="inventoryCounts" label="瀹炵洏鏁伴噺" align="center"></el-table-column>
+      <el-table-column prop="inventoryCounts" label="鐘舵��" align="center"></el-table-column>
+    </el-table>
+
+    <div slot="footer" align="center" class="dialog-footer">
+      <my-button name="鏆傚瓨" site="form" type="primary" @click="close" />
+      <my-button name="瀹屾垚鐩樼偣" site="form" type="success" @click="save" />
+    </div>
+  </win-md>
+</template>
+
+<script>
+import winMd from '@/components/win/win-md';
+import myButton from '@/components/myButton/myButton';
+export default {
+  components: { winMd, myButton },
+  props: {
+    setting: {
+      type: Object,
+      default: () => {},
+    },
+  },
+  data() {
+    return {
+      loading: false,
+      formData: {
+        businessFormCode: '2023080812',
+        businessTaskCode: '2023骞�9鏈堢洏鐐瑰崟',
+        warehouseId: '寮�灏佸競浠撳簱',
+        tableData: [],
+      },
+    };
+  },
+  created() {
+    for (let i = 0; i < 10; i++) {
+      this.formData.tableData.push({
+        goodsTemplateName: '鏂戒箰榛戣壊纰崇矇',
+        baseGoodsModelsId: '鏂戒箰c2201',
+        classification: 'A',
+        unit: '濂�',
+        kc: 10,
+        price: 20,
+        inventoryResult: 200,
+        inventoryCounts: 0,
+      });
+    }
+  },
+  methods: {
+    close() {
+      this.$emit('close');
+    },
+    save() {},
+  },
+};
+</script>
+
+<style></style>
diff --git a/admin-web/src/views/stock/ledger/ledgerQuery/index.vue b/admin-web/src/views/stock/ledger/ledgerQuery/index.vue
index b32fc38..89c5be4 100644
--- a/admin-web/src/views/stock/ledger/ledgerQuery/index.vue
+++ b/admin-web/src/views/stock/ledger/ledgerQuery/index.vue
@@ -161,13 +161,13 @@
         },
         // 鍒椾俊鎭�
         columns: [
-          { title: '鏈烘瀯', field: 'name', align: 'left' },
-          { title: '浠撳簱', field: 'code', align: 'center' },
-          { title: '鐗╁搧鍚嶇О', field: 'lv', align: 'center' },
-          { title: '瑙勬牸鍨嬪彿', field: 'lv', align: 'center' },
+          { title: '鏈烘瀯', field: 'agencyName', align: 'left' },
+          { title: '浠撳簱', field: 'warehouseName', align: 'center' },
+          { title: '鐗╁搧鍚嶇О', field: 'goodsTemplateName', align: 'center' },
+          { title: '瑙勬牸鍨嬪彿', field: 'baseGoodsModelsName', align: 'center' },
           { title: '绫诲瀷', field: 'summary', align: 'left' },
           { title: '鍗曞彿', field: 'summary', align: 'left' },
-          { title: '鏁伴噺', field: 'summary', align: 'left' },
+          { title: '鏁伴噺', field: 'counts', align: 'left' },
           { title: '鎿嶄綔鍓嶆暟閲�', field: 'summary', align: 'left' },
           { title: '鎿嶄綔鍚庢暟閲�', field: 'summary', align: 'left' },
           { title: '鍦ㄩ��', field: 'summary', align: 'left' },
diff --git a/admin-web/src/views/stock/procure/purchaseOrder/edit.vue b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue
index 121b417..9ed3d61 100644
--- a/admin-web/src/views/stock/procure/purchaseOrder/edit.vue
+++ b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue
@@ -65,14 +65,10 @@
               <el-form-item
                 label="鐗╁搧鍚嶇О"
                 :prop="`procureGoods[${goodsIndex}].baseGoodsTemplateId`"
-                :rules="{
-                  required: true,
-                  message: '璇烽�夋嫨',
-                  trigger: 'change',
-                }"
+                :rules="rules.baseGoodsTemplateId"
               >
                 <el-select
-                  v-model="goodsItem.baseGoodsTemplateId"
+                 v-model="goodsItem.baseGoodsTemplateId"
                   placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
                   filterable
                   :disabled="!goodsItem.baseCategoryId"
@@ -137,12 +133,26 @@
             </el-table-column>
             <el-table-column prop="price" label="鍗曚环锛堝厓锛�" align="center">
               <template slot-scope="scope">
-                <el-input type="number" v-model="scope.row.price"></el-input>
+                <el-form-item
+                  label-width="0"
+                  style="margin-bottom: 0"
+                  :prop="`procureGoods[${goodsIndex}].models[${scope.$index}].price`"
+                  :rules="rules.price"
+                >
+                  <el-input type="number" v-model.number="scope.row.price"></el-input>
+                </el-form-item>
               </template>
             </el-table-column>
             <el-table-column prop="counts" label="閲囪喘鏁伴噺" align="center">
               <template slot-scope="scope">
-                <el-input type="number" v-model="scope.row.counts"></el-input>
+                <el-form-item
+                  label-width="0"
+                  style="margin-bottom: 0"
+                  :prop="`procureGoods[${goodsIndex}].models[${scope.$index}].counts`"
+                  :rules="rules.counts"
+                >
+                  <el-input v-model.number="scope.row.counts"></el-input>
+                </el-form-item>
               </template>
             </el-table-column>
           </el-table>
@@ -170,8 +180,8 @@
       </div>
     </el-form>
     <div slot="footer" align="center" class="dialog-footer">
-      <my-button name="鍙栨秷" site="form" @click="close"/>
-      <my-button name="淇濆瓨" site="form" @click="handleSubmit"/>
+      <my-button name="鍙栨秷" site="form" @click="close" />
+      <my-button name="淇濆瓨" site="form" @click="handleSubmit" />
     </div>
   </win-md>
 </template>
@@ -188,36 +198,76 @@
 import MyButton from '@/components/myButton/myButton';
 import winMd from '@/components/win/win-md';
 import upload from '@/components/upload/index';
-import { getUploadUrl,getDownUrl} from '@/utils/base';
-
-import SettingIplatform from '../../../../../public/static/config';
+import { getUploadUrl, getDownUrl } from '@/utils/base';
+import { findParentIds } from '@/utils/index';
+import { mapGetters } from 'vuex';
 
 export default {
   components: { MyButton, winMd, upload },
   props: {
     setting: {
       type: Object,
-      default: () => {
-      }
-    }
+      default: () => {},
+    },
   },
   data() {
+    // 鑷畾涔夋牎楠�
+    // 鐗╁搧閲嶅鏍¢獙
+    var checkGoodsTemplateId = (rule, value, callback) => {
+      if (!value) {
+        return callback(new Error('璇烽�夋嫨'));
+      }
+      let temp = this.formData.procureGoods.filter((v) => v.baseGoodsTemplateId == value);
+      if (!temp || temp.length!=1) {
+        return callback(new Error('宸查�夎繃姝ょ墿鍝�'));
+      }
+      callback();
+    };
+    // 閲戦鏍¢獙
+    var checkPrice = (rule, value, callback) => {
+      if (!value) {
+        return callback(new Error('璇疯緭鍏�'));
+      }
+      if (value == 0) {
+        this.$message.warning('鏁板瓧鍊间笉鑳戒负0');
+        return callback(new Error('鏁板瓧鍊间笉鑳戒负0'));
+      }
+      callback();
+    };
+    // 鏁伴噺鏍¢獙
+    var checkCounts = (rule, value, callback) => {
+      console.log(value)
+      if (!value) {
+        return callback(new Error('璇疯緭鍏�'));
+      }
+      if (!Number.isInteger(value)) {
+        this.$message.warning('璇疯緭鍏ユ暟瀛楀��');
+        return callback(new Error('璇疯緭鍏ユ暟瀛楀��'));
+      }
+      if (value == 0) {
+        this.$message.warning('鏁板瓧鍊间笉鑳戒负0');
+        return callback(new Error('鏁板瓧鍊间笉鑳戒负0'));
+      }
+      callback();
+    };
     return {
-      visible: false,
       loading: false,
-      buyTypeOptions:[{
-        label:'闆嗛噰',
-        value: '1'
-      },{
-        label:'鑷噰',
-        value: '2'
-      }],
-      fileList:[],
+      buyTypeOptions: [
+        {
+          label: '闆嗛噰',
+          value: '1',
+        },
+        {
+          label: '鑷噰',
+          value: '2',
+        },
+      ],
+      fileList: [],
       warehouses: [], // 鍏ュ簱浠撳簱鍒楄〃
       categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃
       modelList: [], //鍨嬪彿鍒楄〃
       formData: {
-        procureDoc:'',
+        procureDoc: '',
         warehouseId: '', // 鍏ュ簱浠撳簱id
         procureTime: '', // 閲囪喘鏃堕棿
         buyType: '2', // 閲囪喘鏂瑰紡锛�1锛氶泦閲囷紱2=鑷噰锛�
@@ -237,9 +287,8 @@
       },
       modelsItem: {
         baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿
-        price: 0, // 鍗曚环(閲囪喘闇�瑕侊紝璋冩嫧涓嶉渶瑕�)
-        counts: 0, // 鎿嶄綔鏁伴噺
-        supplier: '', // 渚涘簲鍟�
+        price: null, // 鍗曚环(閲囪喘闇�瑕侊紝璋冩嫧涓嶉渶瑕�)
+        counts: null, // 鎿嶄綔鏁伴噺
         unit: null, //鍗曚綅
       },
       rules: {
@@ -249,8 +298,10 @@
 
         procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }],
         baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        baseGoodsTemplateId: [{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }],
         modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        price: [{ validator: checkPrice, trigger: 'blur' }],
+        counts: [{ validator: checkCounts, trigger: 'blur' }],
       },
 
       uploadSettings: {
@@ -266,45 +317,51 @@
       },
     };
   },
+  computed: {
+    ...mapGetters(['userInfo']),
+  },
   created() {
-    this.init()
+    this.init();
   },
   methods: {
     async init() {
       this.getWarehouseList();
-      this.getgoodsTemplate()
+      this.getgoodsTemplate();
       this.getgoodsModel();
       // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃
       const treeRes = await getTree();
       this.categoryOptions = this.removeEmptyChildren(treeRes);
       if (this.setting.id) {
-        const detail = await procureDetail({ id:this.setting.id });
+        const detail = await procureDetail({ id: this.setting.id });
         this.formData = Object.assign(this.formData, detail);
-        if(this.formData.procureDoc) {
-          this.fileList = JSON.parse(this.formData.procureDoc)
+        if (this.formData.procureDoc) {
+          this.fileList = JSON.parse(this.formData.procureDoc);
         }
-        this.$set(this.formData,'buyType',this.formData.buyType.toString())
+        this.$set(this.formData, 'buyType', this.formData.buyType.toString());
         this.formData.procureTime = this.formData.procureTime.toString();
         this.formData.procureGoods.map((item, index) => {
           // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃
-          item.baseCategoryIds = this.findParentIds(this.categoryOptions, item.baseCategoryId);
-          this.$set(this.formData.procureGoods[index],'modelsIds',item.models.map((v) => v.baseGoodsModelsId))
+          item.baseCategoryIds = findParentIds(this.categoryOptions, item.baseCategoryId);
+          this.$set(
+            this.formData.procureGoods[index],
+            'modelsIds',
+            item.models.map((v) => v.baseGoodsModelsId),
+          );
           this.getgoodsTemplate(item.baseCategoryId, index);
           this.getgoodsModel(item.baseGoodsTemplateId, index);
-          return item
+          return item;
         });
-        console.log('this.formData.procureGoods',this.formData.procureGoods)
-      } else {
-        this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
       }
-      this.visible = true;
     },
 
     // 鑾峰彇鍏ュ簱浠撳簱鍒楄〃
     getWarehouseList() {
-      selectTenantWarehouse()
+      selectTenantWarehouse({ agencyId: this.userInfo.tenantId })
         .then((res) => {
           this.warehouses = res;
+          if (!this.setting.id && res.length) {
+            this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
+          }
           if (this.warehouses.length && !this.formData.warehouseId) {
             // 榛樿閫変腑绗竴涓粨搴�
             this.formData.warehouseId = this.warehouses[0].id;
@@ -331,7 +388,7 @@
       goodsTemplate({ categoryId: id || '' }).then((res) => {
         if (index || index == 0) {
           this.$set(this.formData.procureGoods[index], 'goodsOptions', res);
-        }else {
+        } else {
           this.goodsTemplatelAll = res;
         }
       });
@@ -368,12 +425,12 @@
 
     // 鐗╁搧鍒嗙被閫夋嫨
     categoryChange(e, index) {
-      this.formData.procureGoods[index].goodsOptions = []
-      this.formData.procureGoods[index].baseGoodsTemplateId = ''
-      this.formData.procureGoods[index].goodsTemplateName = ''
-      this.formData.procureGoods[index].modelsOptions = []
-      this.formData.procureGoods[index].modelsIds = []
-      this.formData.procureGoods[index].models = []
+      this.formData.procureGoods[index].goodsOptions = [];
+      this.formData.procureGoods[index].baseGoodsTemplateId = '';
+      this.formData.procureGoods[index].goodsTemplateName = '';
+      this.formData.procureGoods[index].modelsOptions = [];
+      this.formData.procureGoods[index].modelsIds = [];
+      this.formData.procureGoods[index].models = [];
 
       this.formData.procureGoods[index].baseCategoryId = e[e.length - 1];
       // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
@@ -382,11 +439,11 @@
 
     // 鐗╁搧鍚嶇О鍒楄〃
     goodsTemplateChange(e, index) {
-      this.formData.procureGoods[index].modelsOptions = []
-      this.formData.procureGoods[index].modelsIds = []
-      this.formData.procureGoods[index].models = []
+      this.formData.procureGoods[index].modelsOptions = [];
+      this.formData.procureGoods[index].modelsIds = [];
+      this.formData.procureGoods[index].models = [];
 
-      this.formData.procureGoods[index].goodsTemplateName = this.getGoodsTemplateName(e)
+      this.formData.procureGoods[index].goodsTemplateName = this.getGoodsTemplateName(e);
       // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃
       this.getgoodsModel(e, index);
     },
@@ -413,8 +470,8 @@
 
     // 涓婁紶
     uploadChange() {
-      let arr = this.$refs.uploadRef.fileList
-      this.formData.procureDoc = JSON.stringify(arr)
+      let arr = this.$refs.uploadRef.fileList;
+      this.formData.procureDoc = JSON.stringify(arr);
     },
 
     // 鐐瑰嚮鏂板鐗╁搧
@@ -462,48 +519,12 @@
     },
 
     close() {
-      this.formData ={
+      this.formData = {
         warehouseId: '', // 鍏ュ簱浠撳簱id
         procureTime: '', // 閲囪喘鏃堕棿
         procureGoods: [],
-      }
-      this.$emit('close')
-    },
-
-    // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁�
-    findParentIds(dataSource, nodeId) {
-      const parentIds = [nodeId]; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
-
-      // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣
-      function traverse(node, nodeId) {
-        if (node.id === nodeId) {
-          // 濡傛灉褰撳墠鑺傜偣鐨処D绛変簬瀛愯妭鐐圭殑ID锛屽垯琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣锛屽彲浠ュ紑濮嬪悜涓婃煡鎵剧埗鑺傜偣
-          return true; // 杩斿洖true琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
-        }
-
-        if (node.children) {
-          // 濡傛灉褰撳墠鑺傜偣鏈夊瓙鑺傜偣锛屽垯缁х画閬嶅巻瀛愯妭鐐�
-          for (const childNode of node.children) {
-            if (traverse(childNode, nodeId)) {
-              // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
-              parentIds.unshift(node.id);
-              return true;
-            }
-          }
-        }
-
-        return false; // 濡傛灉褰撳墠鑺傜偣涓嶆槸瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欒繑鍥瀎alse
-      }
-
-      // 浠庢牴鑺傜偣寮�濮嬮亶鍘嗘暣妫垫爲锛屽苟璋冪敤閫掑綊鍑芥暟鏌ユ壘瀛愯妭鐐圭殑鎵�鏈夌埗鑺傜偣
-      for (const node of dataSource) {
-        if (traverse(node, nodeId)) {
-          // 濡傛灉鍦ㄥ綋鍓嶈妭鐐圭殑瀛愭爲涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欑洿鎺ラ��鍑哄惊鐜�
-          break;
-        }
-      }
-
-      return parentIds; // 杩斿洖鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
+      };
+      this.$emit('close');
     },
   },
 };
diff --git a/admin-web/src/views/stock/procure/purchaseOrder/index.vue b/admin-web/src/views/stock/procure/purchaseOrder/index.vue
index 039e815..621f136 100644
--- a/admin-web/src/views/stock/procure/purchaseOrder/index.vue
+++ b/admin-web/src/views/stock/procure/purchaseOrder/index.vue
@@ -13,8 +13,8 @@
               <my-button name="鏂板" @click="handleAdd" site="tools" size="medium" />
               <my-button name="瀵煎叆" @click="importSetting.dialogShow = true" site="tools" size="medium" />
             </div>
-            <div :style="{ 'overflow-y': 'auto', height: `${clientHeight - 320}px` }">
-              <el-row class="card" :gutter="5" v-loading="loading">
+            <div :style="{ 'overflow-y': 'auto', height: `${clientHeight - 320}px` }" v-loading="loading">
+              <el-row v-if="list.length" class="card" :gutter="5">
                 <el-col v-for="(item, index) in list" :key="index" class="cm-item">
                   <el-card class="card-data">
                     <div class="card-container">
@@ -74,6 +74,7 @@
                   </el-card>
                 </el-col>
               </el-row>
+              <div class="no-data" v-else>鏆傛棤鏁版嵁</div>
             </div>
             <el-pagination
               :small="false"
@@ -113,17 +114,17 @@
 
 <script>
 import { procureList, procureDel, procureIncome } from '@/api/stock/procure/purchaseOrder';
-import { getTree } from '@/api/baseSetting/finsystenant';
 import MyButton from '@/components/myButton/myButton';
 import SettingIplatform from '@/utils/settingIplatform';
 import myImport from '@/views/components/myImport';
 import edit from './edit';
 import detail from './detail';
 import { getBaseUrl } from '@/utils/base';
-import * as DateFormatter from '@/utils/DateFormatter';
+import listPage from '../../../mixins/listPage'
 
 export default {
   name: 'index',
+  mixins: [listPage],
   components: { MyButton, myImport, edit, detail },
   data() {
     return {
@@ -157,7 +158,7 @@
         },
         {
           type: 'text',
-          dataIndex: 'buyerName',
+          dataIndex: 'createName',
           label: '鍒涘缓浜�',
           placeholder: '璇疯緭鍏�',
           defaultValue: '',
@@ -198,13 +199,6 @@
       ],
       // 鏍戞暟鎹�
       treeDataList: [],
-      // 鎼滅储鏉′欢
-      filterFrom: {
-        tenantId: null,
-        userName: null,
-        userPhone: null,
-        states: null,
-      },
       // 瀵煎叆
       importSetting: {
         dialogTitle: '瀵煎叆',
@@ -223,35 +217,7 @@
         },
         onSuccess: null,
       },
-      editSetting: {
-        title: '',
-        id: '',
-        orgId: '',
-        show: false,
-      },
-      detailSetting: {
-        title: '璇︽儏',
-        id: '',
-        show: false,
-      },
-      pageNum: 1,
-      pageSize: 10,
-      total: 0,
     };
-  },
-  computed: {
-    clientHeight() {
-      return document.documentElement.clientHeight;
-    },
-  },
-  filters: {
-    formatTime(time) {
-      if (!time) return;
-      return DateFormatter.LongToDateTime(time);
-    },
-  },
-  created() {
-    this.fetchData();
   },
   methods: {
     fetchData() {
@@ -281,27 +247,6 @@
         callBack();
       };
     },
-    // 瀵煎嚭
-    handleExport() {},
-    // 鏂板
-    handleAdd() {
-      this.editSetting.id = null;
-      this.editSetting.info = null;
-      this.editSetting.title = '鏂板';
-      this.editSetting.show = true;
-    },
-    // 缂栬緫
-    handleEdit(row) {
-      this.editSetting.id = row.id;
-      this.editSetting.info = null;
-      this.editSetting.title = '缂栬緫';
-      this.editSetting.show = true;
-    },
-    // 璇︽儏
-    handleDetail(row) {
-      this.detailSetting.id = row.id;
-      this.detailSetting.show = true;
-    },
     // 鍏ュ簱
     handleIncome(row) {
       this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode}  鍏ュ簱鍚�?`, '閲囪喘鍏ュ簱').then(() => {
@@ -323,28 +268,6 @@
           .catch(() => {});
       });
     },
-    // 鍒嗛〉
-    handleSizeChange(pageSize) {
-      this.pageSize = pageSize;
-      this.pageNum = 1;
-      this.search();
-    },
-    handleCurrentChange(pageNum) {
-      this.pageNum = pageNum;
-      this.search(pageNum);
-    },
-    // 鏌ヨtable鍒楄〃
-    search(pageNum) {
-      if (pageNum) {
-        this.pageNum = pageNum;
-      }
-      this.fetchData();
-    },
-    refreshData() {
-      this.pageNum = 1;
-      this.pageSize = 10;
-      this.search();
-    },
     fifterForm(params) {
       this.filterFrom = Object.assign(this.filterFrom, params);
       if (this.filterFrom.incomeTimeStart) {
@@ -353,10 +276,10 @@
       if (this.filterFrom.incomeTimeEnd) {
         this.filterFrom.incomeTimeEnd = this.filterFrom.incomeTimeEnd.replace(/\-/g, '');
       }
-      if (this.filterFrom.agencyId.length) {
+      if (this.filterFrom.agencyId && this.filterFrom.agencyId.length) {
         this.filterFrom.agencyId = this.filterFrom.agencyId[this.filterFrom.agencyId.length - 1];
       }
-      this.search();
+      this.search(1);
     },
   },
 };
diff --git a/admin-web/src/views/stock/procure/receiptDetails/index.vue b/admin-web/src/views/stock/procure/receiptDetails/index.vue
index 64d606b..acb87e4 100644
--- a/admin-web/src/views/stock/procure/receiptDetails/index.vue
+++ b/admin-web/src/views/stock/procure/receiptDetails/index.vue
@@ -77,7 +77,7 @@
         },
         {
           type: 'text',
-          dataIndex: 'buyerName',
+          dataIndex: 'createName',
           label: '鍒涘缓浜�',
           placeholder: '璇疯緭鍏�',
           defaultValue: '',
diff --git a/admin-web/src/views/stock/scrap/itemScrapping/edit.vue b/admin-web/src/views/stock/scrap/itemScrapping/edit.vue
index 88d341f..fd5ec9d 100644
--- a/admin-web/src/views/stock/scrap/itemScrapping/edit.vue
+++ b/admin-web/src/views/stock/scrap/itemScrapping/edit.vue
@@ -4,10 +4,20 @@
       <div class="main-w">
         <el-row :gutter="24" class="headerHeight">
           <el-col :span="12">
+            <el-form-item label="鏈烘瀯" prop="warehouseId">
+              <el-input :value="formData.agencyName" disabled></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
             <el-form-item label="鎶ュ簾浠撳簱" prop="warehouseId">
-              <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%">
-                <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" />
-              </el-select>
+              <el-input :value="formData.warehouseName" disabled></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="24" class="headerHeight">
+          <el-col :span="12">
+            <el-form-item label="鎶ュ簾浜�" prop="buyType">
+              <el-input :value="formData.operatorName" disabled></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -25,17 +35,8 @@
           </el-col>
         </el-row>
         <el-row :gutter="24" class="headerHeight">
-          <el-col :span="12">
-            <el-form-item label="鎶ュ簾绫诲瀷" prop="buyType">
-              <el-select v-model="formData.buyType" placeholder="璇烽�夋嫨" style="width: 100%">
-                <el-option v-for="item in buyTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="24" class="headerHeight">
           <el-col :span="24">
-            <el-form-item label="鎶ュ簾鎶ュ簾鎵嬬画" prop="procureDoc">
+            <el-form-item label="鎶ュ簾瀹℃壒鎵嬬画" prop="procureDoc">
               <upload ref="uploadRef" :values="fileList" :settings="uploadSettings" @on-change="uploadChange"></upload>
             </el-form-item>
           </el-col>
@@ -118,24 +119,14 @@
                 </el-select>
               </el-form-item>
             </el-col>
-            <el-col :span="12">
-              <el-form-item label="渚涜揣鍟�" prop="supplier">
-                <el-input v-model="goodsItem.supplier" clearable maxlength="20" show-word-limit />
-              </el-form-item>
-            </el-col>
           </el-row>
           <el-table :data="goodsItem.models" :stripe="true">
-            <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center">
+            <el-table-column prop="baseGoodsModelsId" label="鍨嬪彿" align="center">
               <template slot-scope="scope">
                 {{ getGoodsModelsName(scope.row.baseGoodsModelsId) }}
               </template>
             </el-table-column>
-            <el-table-column label="鍗曚綅" align="center">
-              <template slot-scope="scope">
-                {{ scope.row.unit }}
-              </template>
-            </el-table-column>
-            <el-table-column prop="price" label="鍗曚环锛堝厓锛�" align="center">
+            <el-table-column prop="price" label="鍓╀綑鏁伴噺" align="center">
               <template slot-scope="scope">
                 <el-input type="number" v-model="scope.row.price"></el-input>
               </template>
@@ -143,6 +134,13 @@
             <el-table-column prop="counts" label="鎶ュ簾鏁伴噺" align="center">
               <template slot-scope="scope">
                 <el-input type="number" v-model="scope.row.counts"></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column prop="counts" label="鎶ュ簾鍘熷洜" align="center">
+              <template slot-scope="scope">
+                <el-select v-model="scope.row.modelsIds" multiple placeholder="璇烽�夋嫨">
+                  <el-option v-for="item in []" :key="item.id" :label="item.label" :value="item.id" />
+                </el-select>
               </template>
             </el-table-column>
           </el-table>
@@ -170,8 +168,8 @@
       </div>
     </el-form>
     <div slot="footer" align="center" class="dialog-footer">
-      <my-button name="鍙栨秷" site="form" @click="close"/>
-      <my-button name="淇濆瓨" site="form" @click="handleSubmit"/>
+      <my-button name="鍙栨秷" site="form" @click="close" />
+      <my-button name="淇濆瓨" site="form" @click="handleSubmit" />
     </div>
   </win-md>
 </template>
@@ -188,8 +186,8 @@
 import MyButton from '@/components/myButton/myButton';
 import winMd from '@/components/win/win-md';
 import upload from '@/components/upload/index';
-import { getUploadUrl,getDownUrl} from '@/utils/base';
-
+import { getUploadUrl, getDownUrl } from '@/utils/base';
+import { mapGetters } from 'vuex';
 import SettingIplatform from '../../../../../public/static/config';
 
 export default {
@@ -197,27 +195,29 @@
   props: {
     setting: {
       type: Object,
-      default: () => {
-      }
-    }
+      default: () => {},
+    },
   },
   data() {
     return {
       visible: false,
       loading: false,
-      buyTypeOptions:[{
-        label:'闆嗛噰',
-        value: '1'
-      },{
-        label:'鑷噰',
-        value: '2'
-      }],
-      fileList:[],
+      buyTypeOptions: [
+        {
+          label: '闆嗛噰',
+          value: '1',
+        },
+        {
+          label: '鑷噰',
+          value: '2',
+        },
+      ],
+      fileList: [],
       warehouses: [], // 鎶ュ簾浠撳簱鍒楄〃
       categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃
       modelList: [], //鍨嬪彿鍒楄〃
       formData: {
-        procureDoc:'',
+        procureDoc: '',
         warehouseId: '', // 鎶ュ簾浠撳簱id
         procureTime: '', // 鎶ュ簾鏃堕棿
         buyType: '2', // 鎶ュ簾鏂瑰紡锛�1锛氶泦閲囷紱2=鑷噰锛�
@@ -228,7 +228,6 @@
         baseCategoryId: '', // 鍒嗙被缂栧彿
         baseGoodsTemplateId: '', // 鐗╁搧妯$増缂栧彿
         goodsTemplateName: '', // 鐗╁搧妯$増鍚嶇О
-        supplier: '', // 渚涘簲鍟�
         sort: '', // 鏄剧ず椤哄簭
         goodsOptions: [], // 鐗╁搧鍒楄〃select
         modelsOptions: [], //瑙勬牸鍨嬪彿select
@@ -237,10 +236,7 @@
       },
       modelsItem: {
         baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿
-        price: 0, // 鍗曚环(鎶ュ簾闇�瑕侊紝璋冩嫧涓嶉渶瑕�)
         counts: 0, // 鎿嶄綔鏁伴噺
-        supplier: '', // 渚涘簲鍟�
-        unit: null, //鍗曚綅
       },
       rules: {
         warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
@@ -266,38 +262,31 @@
       },
     };
   },
+  computed: {
+    ...mapGetters(['userInfo']),
+  },
   created() {
-    this.init()
+    this.init();
   },
   methods: {
     async init() {
       this.getWarehouseList();
-      this.getgoodsTemplate()
+      this.getgoodsTemplate();
       this.getgoodsModel();
+      this.getCategoryTree();
+      this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
+      this.formData.operatorId = this.userInfo.userCode;
+      this.formData.operatorName = this.userInfo.id;
+      this.formData.agencyId = this.userInfo.tenantId;
+      this.formData.agencyName = this.userInfo.tenantName;
+      this.formData.warehouseId = this.userInfo.tenantId;
+      this.formData.warehouseName = this.userInfo.tenantName;
+      this.formData.WAREHOUSE_TYPE = 0;
+    },
+    async getCategoryTree() {
       // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃
       const treeRes = await getTree();
       this.categoryOptions = this.removeEmptyChildren(treeRes);
-      if (this.setting.id) {
-        const detail = await procureDetail({ id:this.setting.id });
-        this.formData = Object.assign(this.formData, detail);
-        if(this.formData.procureDoc) {
-          this.fileList = JSON.parse(this.formData.procureDoc)
-        }
-        this.$set(this.formData,'buyType',this.formData.buyType.toString())
-        this.formData.procureTime = this.formData.procureTime.toString();
-        this.formData.procureGoods.map((item, index) => {
-          // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃
-          item.baseCategoryIds = this.findParentIds(this.categoryOptions, item.baseCategoryId);
-          this.$set(this.formData.procureGoods[index],'modelsIds',item.models.map((v) => v.baseGoodsModelsId))
-          this.getgoodsTemplate(item.baseCategoryId, index);
-          this.getgoodsModel(item.baseGoodsTemplateId, index);
-          return item
-        });
-        console.log('this.formData.procureGoods',this.formData.procureGoods)
-      } else {
-        this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
-      }
-      this.visible = true;
     },
 
     // 鑾峰彇鎶ュ簾浠撳簱鍒楄〃
@@ -331,7 +320,7 @@
       goodsTemplate({ categoryId: id || '' }).then((res) => {
         if (index || index == 0) {
           this.$set(this.formData.procureGoods[index], 'goodsOptions', res);
-        }else {
+        } else {
           this.goodsTemplatelAll = res;
         }
       });
@@ -368,12 +357,12 @@
 
     // 鐗╁搧鍒嗙被閫夋嫨
     categoryChange(e, index) {
-      this.formData.procureGoods[index].goodsOptions = []
-      this.formData.procureGoods[index].baseGoodsTemplateId = ''
-      this.formData.procureGoods[index].goodsTemplateName = ''
-      this.formData.procureGoods[index].modelsOptions = []
-      this.formData.procureGoods[index].modelsIds = []
-      this.formData.procureGoods[index].models = []
+      this.formData.procureGoods[index].goodsOptions = [];
+      this.formData.procureGoods[index].baseGoodsTemplateId = '';
+      this.formData.procureGoods[index].goodsTemplateName = '';
+      this.formData.procureGoods[index].modelsOptions = [];
+      this.formData.procureGoods[index].modelsIds = [];
+      this.formData.procureGoods[index].models = [];
 
       this.formData.procureGoods[index].baseCategoryId = e[e.length - 1];
       // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
@@ -382,11 +371,11 @@
 
     // 鐗╁搧鍚嶇О鍒楄〃
     goodsTemplateChange(e, index) {
-      this.formData.procureGoods[index].modelsOptions = []
-      this.formData.procureGoods[index].modelsIds = []
-      this.formData.procureGoods[index].models = []
+      this.formData.procureGoods[index].modelsOptions = [];
+      this.formData.procureGoods[index].modelsIds = [];
+      this.formData.procureGoods[index].models = [];
 
-      this.formData.procureGoods[index].goodsTemplateName = this.getGoodsTemplateName(e)
+      this.formData.procureGoods[index].goodsTemplateName = this.getGoodsTemplateName(e);
       // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃
       this.getgoodsModel(e, index);
     },
@@ -413,8 +402,8 @@
 
     // 涓婁紶
     uploadChange() {
-      let arr = this.$refs.uploadRef.fileList
-      this.formData.procureDoc = JSON.stringify(arr)
+      let arr = this.$refs.uploadRef.fileList;
+      this.formData.procureDoc = JSON.stringify(arr);
     },
 
     // 鐐瑰嚮鏂板鐗╁搧
@@ -462,12 +451,12 @@
     },
 
     close() {
-      this.formData ={
+      this.formData = {
         warehouseId: '', // 鎶ュ簾浠撳簱id
         procureTime: '', // 鎶ュ簾鏃堕棿
         procureGoods: [],
-      }
-      this.$emit('close')
+      };
+      this.$emit('close');
     },
 
     // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁�
diff --git a/admin-web/src/views/stock/transfer/transferApplication/detail.vue b/admin-web/src/views/stock/transfer/transferApplication/detail.vue
index f126f45..1716dfe 100644
--- a/admin-web/src/views/stock/transfer/transferApplication/detail.vue
+++ b/admin-web/src/views/stock/transfer/transferApplication/detail.vue
@@ -1,124 +1,118 @@
 <template>
-  <el-dialog
-    title="璇︽儏"
-    width="60%"
-    :modal="true"
-    :visible.sync="visible"
-    :top="'15vh'"
-    :close-on-click-modal="false"
-    :append-to-body="true"
-    :destroy-on-close="true"
-    @close="close"
-    class="stock-detail"
-  >
-    <el-row :gutter="20">
-      <el-col :span="8">
-        <span>璋冩嫧鍗曞彿锛�</span>
-        <span>{{ detail.businessFormCode }}</span>
-      </el-col>
-      <el-col :span="8">
-        <span>璋冩嫧浠撳簱锛�</span>
-        <span>{{ detail.warehouseName }}</span>
-      </el-col>
-      <el-col :span="8">
-        <span>鎵�灞炴満鏋勶細</span>
-        <span>{{ detail.agencyId }}</span>
-      </el-col>
-    </el-row>
-    <el-row :gutter="20" style="margin-top: 20px">
-      <el-col :span="8">
-        <span>鐘舵�侊細</span>
-        <span>{{ detail.states == 1 ? '寰呰皟鎷�' : '宸茶皟鎷�' }}</span>
-      </el-col>
-      <el-col :span="8">
-        <span>鍒涘缓浜猴細</span>
-        <span>{{ detail.buyerName }}</span>
-      </el-col>
-      <el-col :span="8">
-        <span>璋冩嫧鏃堕棿锛�</span>
-        <span>{{ detail.incomeTime | formatTime }}</span>
-      </el-col>
-    </el-row>
-    <el-row :gutter="20" style="margin-top: 20px">
-      <el-col class="img-row" :span="24">
-        <span>璋冩嫧鎵嬬画鐓х墖锛�</span>
-        <div class="img-box"></div>
-      </el-col>
-    </el-row>
-    <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.procureGoods" :key="goodsIndex">
+  <win-md class="stock-detail" :title="setting.title" @close="close" :width="'800px'">
+    <div v-loading="loading">
       <el-row :gutter="20">
         <el-col :span="8">
-          <span>鐗╁搧鍒嗙被锛�</span>
-          <span>{{ goodsItem.baseCategoryId }}</span>
+          <span>璋冩嫧鍗曞彿锛�</span>
+          <span>{{ detail.businessFormCode }}</span>
         </el-col>
         <el-col :span="8">
-          <span>鐗╁搧鍚嶇О锛�</span>
-          <span>{{ goodsItem.goodsTemplateName }}</span>
+          <span>璋冩嫧鏈烘瀯锛�</span>
+          <span>{{ detail.outAgencyName }}</span>
         </el-col>
         <el-col :span="8">
-          <span>渚涜揣鍟嗭細</span>
-          <span>{{ goodsItem.supplier }}</span>
+          <span>鎺ユ敹鏈烘瀯锛�</span>
+          <span>{{ detail.inAgencyName }}</span>
         </el-col>
       </el-row>
-      <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px">
-        <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center">
-          <template slot-scope="scope">
-            {{ scope.row.baseGoodsModelsName }}
-          </template>
-        </el-table-column>
-        <el-table-column label="鍗曚綅" align="center">
-          <template slot-scope="scope">
-            {{ scope.row.unit }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center">
-          <template slot-scope="scope">
-            {{ scope.row.price }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center">
-          <template slot-scope="scope">
-            {{ scope.row.counts }}
-          </template>
-        </el-table-column>
-      </el-table>
+      <el-row :gutter="20" style="margin-top: 20px">
+        <el-col :span="8">
+          <span>鐢宠璋冩嫧鏃堕棿锛�</span>
+          <span>{{ detail.createTime | formatTime }}</span>
+        </el-col>
+        <el-col :span="8">
+          <span>鐘舵�侊細</span>
+          <span>{{ getStatesLabel(detail.states) }}</span>
+        </el-col>
+        <el-col :span="8">
+          <span>璋冩嫧鏃堕棿锛�</span>
+          <span>{{ detail.outputTime | formatTime }}</span>
+        </el-col>
+      </el-row>
+      <el-row v-if="fileList && fileList.length" :gutter="20" style="margin-top: 20px">
+        <el-col class="img-row" :span="24">
+          <span>璋冩嫧鎵嬬画鐓х墖锛�</span>
+        <div class="img-box" v-for="(item, index) in fileList" :key="index" @click="handlePreview(item)">
+          <img class="img" :src="getUrl(item.path)" alt="" />
+        </div>
+        </el-col>
+      </el-row>
+      <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.formTransferGoods" :key="goodsIndex">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <span>鐗╁搧鍒嗙被锛�</span>
+            <span>{{ goodsItem.categoryName }}</span>
+          </el-col>
+          <el-col :span="12">
+            <span>鐗╁搧鍚嶇О锛�</span>
+            <span>{{ goodsItem.goodsName }}</span>
+          </el-col>
+        </el-row>
+        <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px">
+          <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center">
+            <template slot-scope="scope">
+              {{ scope.row.baseGoodsModelsName }}
+            </template>
+          </el-table-column>
+          <el-table-column label="鍗曚綅" align="center">
+            <template slot-scope="scope">
+              {{ scope.row.unit }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center">
+            <template slot-scope="scope">
+              {{ scope.row.price }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center">
+            <template slot-scope="scope">
+              {{ scope.row.counts }}
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
     </div>
-  </el-dialog>
+  </win-md>
 </template>
 <script>
-import { procureDetail } from '@/api/stock/procure/purchaseOrder';
+import { transferDetail } from '@/api/stock/transfer';
 import * as DateFormatter from '@/utils/DateFormatter';
+import winMd from '@/components/win/win-md';
+import transfer from '../../../mixins/transfer';
 
 export default {
+  mixins: [transfer],
+  components: { winMd },
+  props: {
+    setting: {
+      type: Object,
+      default: () => {},
+    },
+  },
   data() {
     return {
-      visible: false,
-      detail: {
-        businessFormCode: '',
-        goodsTemplateName: '',
-        agencyId: '',
-        states: '',
-        createName: '',
-        time: '',
-        procureGoods: [{}, {}],
-      },
+      loading: false,
+      detail: {},
+      fileList:[]
     };
   },
-  filters:{
+  filters: {
     formatTime(time) {
-      if(!time) return
-      return DateFormatter.LongToDateTime(time)
-    }
+      if (!time) return '-';
+      return DateFormatter.LongToDateTime(time);
+    },
+  },
+  created() {
+    this.loading = true;
+    transferDetail({ id: this.setting.id }).then((res) => {
+      this.detail = res;
+      this.fileList = this.detail.procureDoc ? JSON.parse(this.detail.procureDoc) : [];
+      this.loading = false;
+    });
   },
   methods: {
-    open(id) {
-      this.visible = true;
-      procureDetail({ id }).then((res) => {
-        this.detail = res;
-      });
-    },
     close() {
-      this.visible = false;
+      this.$emit('close');
     },
   },
 };
diff --git a/admin-web/src/views/stock/transfer/transferApplication/edit.vue b/admin-web/src/views/stock/transfer/transferApplication/edit.vue
index dcb0408..a990b13 100644
--- a/admin-web/src/views/stock/transfer/transferApplication/edit.vue
+++ b/admin-web/src/views/stock/transfer/transferApplication/edit.vue
@@ -1,19 +1,19 @@
 <template>
-  <win-md class="stock-edit" :title="`${setting.title}璋冩嫧璋冩嫧`" @close="close" :width="'800px'">
+  <win-md class="stock-edit" title="璋冩嫧鐢宠" @close="close" :width="'800px'">
     <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
       <div class="main-w">
         <el-row :gutter="24" class="headerHeight">
           <el-col :span="12">
-            <el-form-item label="璋冩嫧浠撳簱" prop="warehouseId">
-              <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%">
-                <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" />
+            <el-form-item label="璋冩嫧鏈烘瀯" prop="outAgencyId">
+              <el-select v-model="formData.outAgencyId" placeholder="璇烽�夋嫨" style="width: 100%">
+                <el-option v-for="item in agencyOptions" :key="item.id" :label="item.name" :value="item.id" />
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="璋冩嫧鏃堕棿" prop="procureTime">
+            <el-form-item label="璋冩嫧鏃堕棿" prop="createTime">
               <el-date-picker
-                v-model="formData.procureTime"
+                v-model="formData.createTime"
                 type="datetime"
                 value="yyyy-MM-dd HH:mm:ss"
                 value-format="yyyyMMddHHmmss"
@@ -25,18 +25,18 @@
           </el-col>
         </el-row>
         <el-row :gutter="24" class="headerHeight">
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="璋冩嫧鎵嬬画" prop="procureDoc">
               <upload :settings="uploadSettings" @on-change="uploadChange"></upload>
             </el-form-item>
           </el-col>
         </el-row>
-        <div class="goods-card" v-for="(goodsItem, goodsIndex) in formData.procureGoods" :key="goodsIndex">
+        <div class="goods-card" v-for="(goodsItem, goodsIndex) in formData.transferGoods" :key="goodsIndex">
           <el-row :gutter="24">
             <el-col :span="12">
               <el-form-item
                 label="鐗╁搧鍒嗙被"
-                :prop="`procureGoods[${goodsIndex}].baseCategoryIds`"
+                :prop="`transferGoods[${goodsIndex}].baseCategoryIds`"
                 :rules="{
                   required: true,
                   message: '璇烽�夋嫨',
@@ -55,7 +55,7 @@
             <el-col :span="12">
               <el-form-item
                 label="鐗╁搧鍚嶇О"
-                :prop="`procureGoods[${goodsIndex}].baseGoodsTemplateId`"
+                :prop="`transferGoods[${goodsIndex}].baseGoodsTemplateId`"
                 :rules="{
                   required: true,
                   message: '璇烽�夋嫨',
@@ -63,7 +63,7 @@
                 }"
               >
                 <el-select
-                  v-model="goodsItem.baseGoodsTemplateId"
+                  :value="goodsItem.baseGoodsTemplateId"
                   placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
                   filterable
                   :disabled="!goodsItem.baseCategoryId"
@@ -84,7 +84,7 @@
             <el-col :span="12">
               <el-form-item
                 label="瑙勬牸鍨嬪彿"
-                :prop="`procureGoods[${goodsIndex}].modelsIds`"
+                :prop="`transferGoods[${goodsIndex}].modelsIds`"
                 :rules="{
                   required: true,
                   message: '璇烽�夋嫨',
@@ -121,24 +121,31 @@
                 {{ scope.row.unit }}
               </template>
             </el-table-column>
-            <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center">
-              <template slot-scope="scope">{{  }}
+            <el-table-column prop="price" label="鍓╀綑搴撳瓨" align="center">
+              <template slot-scope="scope">
                 {{ scope.row.worehouseCount }}
               </template>
             </el-table-column>
-            <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center">
+            <el-table-column prop="counts" label="鐢宠鏁伴噺" align="center">
               <template slot-scope="scope">
-                <el-input
-                  type="number"
-                  v-model="scope.row.counts"
-                  @change="countsChange($event, goodsIndex,scope.$index)"
-                ></el-input>
+                <el-form-item
+                  label-width="0"
+                  style="margin-bottom: 0"
+                  :prop="`transferGoods[${goodsIndex}].models[${scope.$index}].counts`"
+                  :rules="rules.counts"
+                >
+                  <el-input
+                    v-model.number="scope.row.counts"
+                    placeholder="璇疯緭鍏�"
+                    @change="countsChange($event, goodsIndex, scope.$index)"
+                  ></el-input>
+                </el-form-item>
               </template>
             </el-table-column>
           </el-table>
           <div class="btn-group">
             <el-button
-              v-if="formData.procureGoods.length > 1"
+              v-if="formData.transferGoods.length > 1"
               name="绉婚櫎"
               type="danger"
               plain
@@ -147,7 +154,7 @@
               >绉婚櫎</el-button
             >
             <el-button
-              v-if="formData.procureGoods.length - 1 == goodsIndex"
+              v-if="formData.transferGoods.length - 1 == goodsIndex"
               name="鏂板鐗╁搧"
               type="primary"
               plain
@@ -166,21 +173,14 @@
   </win-md>
 </template>
 <script>
-import {
-  goodsTemplate,
-  procureAdd,
-  procureEdit,
-  selectTenantWarehouse,
-  goodsModel,
-  procureDetail,
-} from '@/api/stock/procure/purchaseOrder';
-import { getTree } from '@/api/foudation/classification';
+import { transferAdd } from '@/api/stock/transfer';
+import { getCategorySelectTree, getTree, goodsTemplate, goodsModel } from '@/api/baseSetting/finsystenant';
+import { getParentTenant,queryWarehouseGoods } from '@/api/stock/transfer';
 import MyButton from '@/components/myButton/myButton';
 import winMd from '@/components/win/win-md';
 import upload from '@/components/upload/index';
 import { getUploadUrl } from '@/utils/base';
-
-import SettingIplatform from '../../../../../public/static/config';
+import { mapGetters } from 'vuex';
 
 export default {
   components: { MyButton, winMd, upload },
@@ -192,35 +192,21 @@
   },
   data() {
     return {
-      visible: false,
       loading: false,
-      buyTypeOptions: [
-        {
-          label: '闆嗛噰',
-          value: '1',
-        },
-        {
-          label: '鑷噰',
-          value: '2',
-        },
-      ],
-      warehouses: [], // 璋冩嫧浠撳簱鍒楄〃
+      agencyOptions: [], // 璋冩嫧鏈烘瀯
       categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃
       modelList: [], //鍨嬪彿鍒楄〃
       formData: {
-        warehouseId: '', // 璋冩嫧浠撳簱id
-        procureTime: '', // 璋冩嫧鏃堕棿
-        buyType: '2', // 璋冩嫧鏂瑰紡锛�1锛氶泦閲囷紱2=鑷噰锛�
-        procureGoods: [],
+        transferBusinessType: 0, // 鍗曟嵁绫诲瀷銆�0浠撳簱璋冩嫧锛�1閮ㄩ棬鍒嗗彂锛�2閮ㄩ棬鐗╁搧鍥為��
+        outAgencyId: '', // 璋冩嫧鏈烘瀯id
+        createTime: '', // 璋冩嫧鏃堕棿
+        transferGoods: [],
       },
       goodsItem: {
-        whFormProcureId: '', // 璋冩嫧鍗旾D
         baseCategoryIds: '', // 鍒嗙被缂栧彿鏁扮粍
         baseCategoryId: '', // 鍒嗙被缂栧彿
         baseGoodsTemplateId: '', // 鐗╁搧妯$増缂栧彿
         goodsTemplateName: '', // 鐗╁搧妯$増鍚嶇О
-        supplier: '', // 渚涘簲鍟�
-        sort: '', // 鏄剧ず椤哄簭
         goodsOptions: [], // 鐗╁搧鍒楄〃select
         modelsOptions: [], //瑙勬牸鍨嬪彿select
         models: [], // 鐗╁搧鍚嶇О
@@ -228,21 +214,21 @@
       },
       modelsItem: {
         baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿
-        price: 0, // 鍗曚环(璋冩嫧闇�瑕侊紝璋冩嫧涓嶉渶瑕�)
-        worehouseCount: 0,
-        counts: 0, // 鎿嶄綔鏁伴噺
-        supplier: '', // 渚涘簲鍟�
+        worehouseCount: 10,
+        counts: null, // 鎿嶄綔鏁伴噺
         unit: null, //鍗曚綅
       },
       rules: {
         warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        procureTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        buyType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        createTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
 
-        // procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }],
         baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
         baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
         modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        counts: [
+          { required: true, message: '璇疯緭鍏�', trigger: 'change' },
+          { type: 'number', message: '鏁伴噺蹇呴』涓烘暣鏁�' },
+        ],
       },
 
       uploadSettings: {
@@ -258,55 +244,33 @@
       },
     };
   },
+  computed: {
+    ...mapGetters(['userInfo']),
+  },
   created() {
     this.init();
   },
   methods: {
     async init() {
-      this.getWarehouseList();
+      this.handegetParentTenant();
       this.getgoodsTemplate();
       this.getgoodsModel();
-      // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃
-      const treeRes = await getTree();
-      this.categoryOptions = this.removeEmptyChildren(treeRes);
-      if (this.setting.id) {
-        const detail = await procureDetail({ id: this.setting.id });
-        this.formData = Object.assign(this.formData, detail);
-        this.$set(this.formData, 'buyType', this.formData.buyType.toString());
-        this.formData.procureTime = this.formData.procureTime.toString();
-        this.formData.procureGoods.map((item, index) => {
-          // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃
-          let pIds = this.findParentIds(this.categoryOptions, item.baseCategoryId);
-          pIds = pIds.reverse();
-          item.baseCategoryIds = [...pIds, item.baseCategoryId];
-          this.$set(
-            this.formData.procureGoods[index],
-            'modelsIds',
-            item.models.map((v) => v.baseGoodsModelsId),
-          );
-          this.getgoodsTemplate(item.baseCategoryId, index);
-          this.getgoodsModel(item.baseGoodsTemplateId, index);
-          return item;
-        });
-      } else {
-        this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
-      }
-      this.visible = true;
+      this.getCategoryTree();
+      this.formData.transferGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
     },
 
-    // 鑾峰彇璋冩嫧浠撳簱鍒楄〃
-    getWarehouseList() {
-      selectTenantWarehouse()
-        .then((res) => {
-          this.warehouses = res;
-          if (this.warehouses.length && !this.formData.warehouseId) {
-            // 榛樿閫変腑绗竴涓粨搴�
-            this.formData.warehouseId = this.warehouses[0].id;
-          }
-        })
-        .catch((err) => {
-          console.log('err', err);
-        });
+    // 鑾峰彇涓婄骇鏈烘瀯
+    handegetParentTenant() {
+      getParentTenant().then((res) => {
+        this.agencyOptions = [res];
+        this.formData.outAgencyId = res.id;
+      });
+    },
+
+    async getCategoryTree() {
+      // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃
+      const treeRes = await getCategorySelectTree();
+      this.categoryOptions = this.removeEmptyChildren(treeRes);
     },
 
     removeEmptyChildren(arr) {
@@ -322,9 +286,9 @@
 
     // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃
     getgoodsTemplate(id, index) {
-      goodsTemplate({ categoryId: id || '' }).then((res) => {
+      queryWarehouseGoods({ categoryId: id || '', agencyId: this.formData.outAgencyId }).then((res) => {
         if (index || index == 0) {
-          this.$set(this.formData.procureGoods[index], 'goodsOptions', res);
+          this.$set(this.formData.transferGoods[index], 'goodsOptions', res);
         } else {
           this.goodsTemplatelAll = res;
         }
@@ -335,7 +299,7 @@
     getgoodsModel(id, index) {
       goodsModel({ goodsTemplatesId: id || '' }).then((res) => {
         if (index || index == 0) {
-          this.$set(this.formData.procureGoods[index], 'modelsOptions', res);
+          this.$set(this.formData.transferGoods[index], 'modelsOptions', res);
         } else {
           this.goodsModelAll = res;
         }
@@ -362,32 +326,39 @@
 
     // 鐗╁搧鍒嗙被閫夋嫨
     categoryChange(e, index) {
-      this.formData.procureGoods[index].goodsOptions = [];
-      this.formData.procureGoods[index].baseGoodsTemplateId = '';
-      this.formData.procureGoods[index].goodsTemplateName = '';
-      this.formData.procureGoods[index].modelsOptions = [];
-      this.formData.procureGoods[index].modelsIds = [];
-      this.formData.procureGoods[index].models = [];
+      this.formData.transferGoods[index].goodsOptions = [];
+      this.formData.transferGoods[index].baseGoodsTemplateId = '';
+      this.formData.transferGoods[index].goodsTemplateName = '';
+      this.formData.transferGoods[index].modelsOptions = [];
+      this.formData.transferGoods[index].modelsIds = [];
+      this.formData.transferGoods[index].models = [];
 
-      this.formData.procureGoods[index].baseCategoryId = e[e.length - 1];
+      this.formData.transferGoods[index].baseCategoryId = e[e.length - 1];
       // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
       this.getgoodsTemplate(e[e.length - 1], index);
     },
 
-    // 鐗╁搧鍚嶇О鍒楄〃
+    // 鐗╁搧鍚嶇О鍒楄〃閫夋嫨
     goodsTemplateChange(e, index) {
-      this.formData.procureGoods[index].modelsOptions = [];
-      this.formData.procureGoods[index].modelsIds = [];
-      this.formData.procureGoods[index].models = [];
+      let temp = this.formData.transferGoods.find(v=>v.baseGoodsTemplateId==e)
+      if(temp) {
+        this.$message.warning('宸查�夎繃姝ょ墿鍝�')
+        return
+      }else{
+        this.formData.transferGoods[index].baseGoodsTemplateId = e
+      }
+      this.formData.transferGoods[index].modelsOptions = [];
+      this.formData.transferGoods[index].modelsIds = [];
+      this.formData.transferGoods[index].models = [];
 
-      this.formData.procureGoods[index].goodsTemplateName = this.getGoodsTemplateName(e);
+      this.formData.transferGoods[index].goodsTemplateName = this.getGoodsTemplateName(e);
       // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃
       this.getgoodsModel(e, index);
     },
 
     // 瑙勬牸鍨嬪彿閫夋嫨
     modelChange(e, index) {
-      let arr = [...this.formData.procureGoods[index].models];
+      let arr = [...this.formData.transferGoods[index].models];
       let str = JSON.stringify(arr);
       e.forEach((item) => {
         if (str.indexOf(item) == -1) {
@@ -395,14 +366,14 @@
           arr.push({ ...this.modelsItem, baseGoodsModelsId: item, unit: temp.unit });
         }
       });
-      this.formData.procureGoods[index].models = arr;
+      this.formData.transferGoods[index].models = arr;
     },
 
     // 瑙勬牸鍨嬪彿绉婚櫎
     modelRemoveTag(e, index) {
-      let arr = this.formData.procureGoods[index].models;
+      let arr = this.formData.transferGoods[index].models;
       let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e);
-      this.formData.procureGoods[index].models.splice(delIndex, 1);
+      this.formData.transferGoods[index].models.splice(delIndex, 1);
     },
 
     // 涓婁紶
@@ -412,21 +383,25 @@
 
     // 鐐瑰嚮鏂板鐗╁搧
     addGoods() {
-      this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
+      this.formData.transferGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
     },
 
     // 鐐瑰嚮绉婚櫎
     removeGoods(index) {
-      this.formData.procureGoods.splice(index, 1);
+      this.formData.transferGoods.splice(index, 1);
     },
 
     // 璋冩嫧鏁伴噺鏍¢獙
-    countsChange(e, goodsIndex,index) {
-      const curItem = this.formData.procureGoods[goodsIndex].models[index]
-      const worehouseCount = curItem.worehouseCount
+    countsChange(e, goodsIndex, index) {
+      const curItem = this.formData.transferGoods[goodsIndex].models[index];
+      const worehouseCount = curItem.worehouseCount;
+      if(e==0) {
+        this.$message.warning('鏁伴噺涓嶈兘涓�0');
+        curItem.counts = null
+      }
       if (e > worehouseCount) {
-        this.$message.warning('鏁伴瓒呰繃鐜版湁搴撳瓨');
-        curItem.counts = worehouseCount
+        this.$message.warning('鏁伴噺瓒呰繃鐜版湁搴撳瓨');
+        curItem.counts = worehouseCount;
       }
     },
 
@@ -435,29 +410,16 @@
       this.$refs['ruleForm'].validate((valid) => {
         if (valid) {
           console.log('this.formData', this.formData);
-          if (this.setting.id) {
-            procureAdd(this.formData)
-              .then((res) => {
-                this.$message.success('淇濆瓨鎴愬姛锛�');
-                this.close();
-                this.$emit('search');
-              })
-              .catch((err) => {
-                console.log('create err', err);
-                this.$message.error('淇濆瓨澶辫触');
-              });
-          } else {
-            procureEdit(this.formData)
-              .then((res) => {
-                this.$message.success('淇濆瓨鎴愬姛锛�');
-                this.close();
-                this.$emit('search');
-              })
-              .catch((err) => {
-                console.log('edit err', err);
-                this.$message.error('淇濆瓨澶辫触');
-              });
-          }
+          transferAdd(this.formData)
+            .then((res) => {
+              this.$message.success('淇濆瓨鎴愬姛锛�');
+              this.close();
+              this.$emit('search');
+            })
+            .catch((err) => {
+              console.log('edit err', err);
+              this.$message.error('淇濆瓨澶辫触');
+            });
         } else {
           this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��');
         }
@@ -468,45 +430,9 @@
       this.formData = {
         warehouseId: '', // 璋冩嫧浠撳簱id
         procureTime: '', // 璋冩嫧鏃堕棿
-        procureGoods: [],
+        transferGoods: [],
       };
       this.$emit('close');
-    },
-
-    // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁�
-    findParentIds(dataSource, nodeId) {
-      const parentIds = []; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
-
-      // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣
-      function traverse(node, nodeId) {
-        if (node.id === nodeId) {
-          // 濡傛灉褰撳墠鑺傜偣鐨処D绛変簬瀛愯妭鐐圭殑ID锛屽垯琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣锛屽彲浠ュ紑濮嬪悜涓婃煡鎵剧埗鑺傜偣
-          return true; // 杩斿洖true琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
-        }
-
-        if (node.children) {
-          // 濡傛灉褰撳墠鑺傜偣鏈夊瓙鑺傜偣锛屽垯缁х画閬嶅巻瀛愯妭鐐�
-          for (const childNode of node.children) {
-            if (traverse(childNode, nodeId)) {
-              // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
-              parentIds.push(node.id);
-              return true;
-            }
-          }
-        }
-
-        return false; // 濡傛灉褰撳墠鑺傜偣涓嶆槸瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欒繑鍥瀎alse
-      }
-
-      // 浠庢牴鑺傜偣寮�濮嬮亶鍘嗘暣妫垫爲锛屽苟璋冪敤閫掑綊鍑芥暟鏌ユ壘瀛愯妭鐐圭殑鎵�鏈夌埗鑺傜偣
-      for (const node of dataSource) {
-        if (traverse(node, nodeId)) {
-          // 濡傛灉鍦ㄥ綋鍓嶈妭鐐圭殑瀛愭爲涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欑洿鎺ラ��鍑哄惊鐜�
-          break;
-        }
-      }
-
-      return parentIds; // 杩斿洖鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
     },
   },
 };
diff --git a/admin-web/src/views/stock/transfer/transferApplication/index.vue b/admin-web/src/views/stock/transfer/transferApplication/index.vue
index f0c1418..64f853c 100644
--- a/admin-web/src/views/stock/transfer/transferApplication/index.vue
+++ b/admin-web/src/views/stock/transfer/transferApplication/index.vue
@@ -9,11 +9,11 @@
         <el-row style="margin-top: 15px">
           <el-col>
             <!--鍒楄〃-->
-            <div class="table-tool-bar" style="margin-bottom: 15px;">
-              <my-button name="鏂板" @click="handleAdd" site="tools" size="medium" />
+            <div class="table-tool-bar" style="margin-bottom: 15px">
+              <my-button name="璋冩嫧鐢宠" icon="el-icon-plus" @click="handleAdd" site="tools" size="medium" />
             </div>
             <div :style="{ 'overflow-y': 'auto', height: `${clientHeight - 320}px` }" v-loading="loading">
-              <el-row class="card" :gutter="5">
+              <el-row v-if="list.length" class="card" :gutter="5">
                 <el-col v-for="(item, index) in list" :key="index" class="cm-item">
                   <el-card class="card-data">
                     <div class="card-container">
@@ -21,26 +21,61 @@
                         <div class="card-header-left">
                           <span>璋冩嫧鍗曞彿锛�</span>
                           <span class="value">{{ item.businessFormCode }}</span>
+                          <div v-if="item.states == 0" class="states states-warning">寰呭嚭搴�</div>
+                          <div v-if="item.states == 1" class="states states-warning">寰呮帴鏀�</div>
+                          <div v-if="item.states == 2" class="states states-success">宸叉帴鏀�</div>
+                          <div v-if="item.states == 4" class="states states-info">宸叉挙閿�</div>
                         </div>
                         <div class="card-header-right">
-                            <el-button site="form" type="success" size="mini" @click="handleExport(item)"
-                              >瀵煎嚭璋冩嫧鍗�</el-button
-                            >
+                          <el-button
+                            v-if="item.states == 1"
+                            site="form"
+                            type="success"
+                            size="mini"
+                            @click="handleIncome(item)"
+                            >鍏ュ簱</el-button
+                          >
+                          <el-button
+                            v-if="item.states == 0"
+                            site="form"
+                            type="danger"
+                            size="mini"
+                            @click="handleRevoke(item)"
+                            >鎾ら攢</el-button
+                          >
+                          <el-button
+                            v-if="item.states == 2"
+                            site="form"
+                            type="primary"
+                            size="mini"
+                            @click="handleExport(item)"
+                            >瀵煎嚭璋冩嫧鍏ュ簱鍗�</el-button
+                          >
                           <el-button name="鏌ョ湅璇︽儏" site="form" type="info" size="mini" @click="handleDetail(item)"
                             >鏌ョ湅璇︽儏</el-button
                           >
                         </div>
                       </div>
                       <div class="one-hed">
-                        <div class="box"><span class="span-two">鏈烘瀯锛�</span>{{ item.agencyId }}</div>
-                        <div class="box"><span class="span-two">鎿嶄綔浜猴細</span>{{ item.buyerName }}</div>
+                        <div class="box"><span class="span-two">鎺ユ敹鏈烘瀯锛�</span>{{ item.inAgencyName }}</div>
+                        <div class="box"><span class="span-two">鐢宠浜猴細</span>{{ item.operatorName }}</div>
                         <div class="box">
-                          <span class="span-two">璋冩嫧鏃堕棿锛�</span>{{ item.procureTime | formatTime }}
+                          <span class="span-two">鐢宠璋冩嫧鏃堕棿锛�</span>{{ item.createTime | formatTime }}
+                        </div>
+                        <div class="box">
+                          <span class="span-two">鎺ユ敹鏃堕棿锛�</span>{{ item.inTime | formatTime }}
+                        </div>
+                      </div>
+                      <div class="one-hed">
+                        <div class="box"><span class="span-two">璋冩嫧鏈烘瀯锛�</span>{{ item.outAgencyName }}</div>
+                        <div class="box"><span class="span-two">璋冩嫧浜猴細</span>{{ item.outOperatorName }}</div>
+                        <div class="box">
+                          <span class="span-two">璋冩嫧鏃堕棿锛�</span>{{ item.outputTime | formatTime }}
                         </div>
                       </div>
                       <div class="card-end">
-                        <div v-for="(just, index) in item.fromProcureTemplateInfoList" :key="index" class="item">
-                          <div class="name">{{ just.goodsTemplateName }}</div>
+                        <div v-for="(just, index) in item.fromTransferTemplateInfoList" :key="index" class="item">
+                          <div class="name">{{ just.goodsName }}</div>
                           <div class="value-box">
                             <div class="value-box-item">
                               <span class="label">鏁伴噺锛�</span>
@@ -54,6 +89,7 @@
                   </el-card>
                 </el-col>
               </el-row>
+              <div class="no-data" v-else>鏆傛棤鏁版嵁</div>
             </div>
             <el-pagination
               :small="false"
@@ -70,28 +106,35 @@
       </el-card>
     </el-container>
     <!--娣诲姞/缂栬緫寮圭獥-->
-    <edit v-if="editSetting.show" :setting="editSetting" ref="editRef" @close="editSetting.show=false" @search="refreshData"></edit>
-    <detail ref="detailRef"></detail>
-    <my-import
-      :import-setting="importSetting"
-      :dialog-show="importSetting.dialogShow"
-      :dialog-title="importSetting.dialogTitle"
-    />
+    <edit
+      v-if="editSetting.show"
+      :setting="editSetting"
+      ref="editRef"
+      @close="editSetting.show = false"
+      @search="refreshData"
+    ></edit>
+    <detail
+      v-if="detailSetting.show"
+      :setting="detailSetting"
+      @close="detailSetting.show = false"
+      ref="detailRef"
+    ></detail>
   </div>
 </template>
 
 <script>
-import { procureList, procureDel, procureIncome } from '@/api/stock/procure/purchaseOrder';
+import { transferList, transferUpdStatus, transfeIncome, transferExport } from '@/api/stock/transfer';
 import MyButton from '@/components/myButton/myButton';
-import SettingIplatform from '@/utils/settingIplatform';
 import myImport from '@/views/components/myImport';
 import edit from './edit';
 import detail from './detail';
-import { getBaseUrl } from '@/utils/base';
-import * as DateFormatter from '@/utils/DateFormatter';
+import listPage from '../../../mixins/listPage';
+import transfer from '../../../mixins/transfer';
+import { commonsApi } from '@/api/commonsApi';
 
 export default {
   name: 'index',
+  mixins: [listPage, transfer],
   components: { MyButton, myImport, edit, detail },
   data() {
     return {
@@ -116,19 +159,19 @@
         },
         {
           type: 'cascader',
-          dataIndex: 'agencyId',
+          dataIndex: 'outAgencyId',
           label: '璋冩嫧鏈烘瀯',
           placeholder: '璇烽�夋嫨',
-          optionsConfig: { url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null },
+          optionsConfig: { url: commonsApi.cascader_tree_fin_tenant, props: null },
           defaultValue: '',
           options: [],
         },
         {
           type: 'cascader',
-          dataIndex: 'name',
+          dataIndex: 'inAgencyId',
           label: '鎺ユ敹鏈烘瀯',
           placeholder: '璇烽�夋嫨',
-          optionsConfig: { url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null },
+          optionsConfig: { url: commonsApi.cascader_tree_fin_tenant, props: null },
           defaultValue: '',
           options: [],
         },
@@ -138,102 +181,53 @@
           label: '鐘舵��',
           placeholder: '璇烽�夋嫨',
           defaultValue: '',
-          options: [
-            {
-              label: '鍏ㄩ儴',
-              value: '',
-            },
-            {
-              label: '寰呰皟鎷�',
-              value: '1',
-            },
-            {
-              label: '宸茶皟鎷�',
-              value: '2',
-            },
-          ],
+          options: [],
         },
         {
           type: 'date-picker',
-          dataIndex: 'val1',
+          dataIndex: 'createTimeStart',
           label: '鐢宠鏃堕棿',
           defaultValue: '',
         },
         {
           type: 'date-picker',
-          dataIndex: 'val2',
+          dataIndex: 'createTimeEnd',
           label: '鑷�',
           defaultValue: '',
         },
         {
           type: 'date-picker',
-          dataIndex: 'val1',
+          dataIndex: 'startTime',
           label: '鎺ユ敹鏃堕棿',
           defaultValue: '',
         },
         {
           type: 'date-picker',
-          dataIndex: 'val2',
+          dataIndex: 'endTime',
           label: '鑷�',
           defaultValue: '',
         },
       ],
-      // 鏍戞暟鎹�
-      treeDataList: [],
-      // 鎼滅储鏉′欢
-      filterFrom: {
-        tenantId: null,
-        userName: null,
-        userPhone: null,
-        states: null,
-      },
-      // 瀵煎叆
-      importSetting: {
-        dialogTitle: '瀵煎叆',
-        dialogShow: false,
-        fileSettings: {
-          data: {},
-          uploadUrl: getBaseUrl() + '/pc/fin/sys/tenant/import', // 涓婁紶鍦板潃
-          accept: '.xls', // 鏍煎紡
-          type: 'text', // 鍥炴樉褰㈠紡
-          loading: false, // 瀵煎叆鏁堟灉
-        },
-        /* 妯℃澘涓嬭浇 */
-        templateSettings: {
-          templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О
-          templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate', // 涓嬭浇鍦板潃
-        },
-        onSuccess: null,
-      },
-      editSetting: {
-        title: '',
-        id: '',
-        orgId: '',
-        show: false,
-      },
-      pageNum: 1,
-      pageSize: 10,
-      total: 0,
+      filterFrom:{
+      }
     };
   },
-  computed: {
-    clientHeight() {
-      return document.documentElement.clientHeight;
-    },
-  },
-  filters: {
-    formatTime(time) {
-      if (!time) return;
-      return DateFormatter.LongToDateTime(time);
-    },
-  },
   created() {
+    this.filterFrom = {
+      operatorId:this.userInfo.id
+    }
     this.fetchData();
+    this.items.map((v) => {
+      if (v.label == '鐘舵��') {
+        v.options = this.statesOptions;
+      }
+      return v;
+    });
   },
   methods: {
     fetchData() {
       this.loading = true;
-      procureList({
+      transferList({
         pageNum: this.pageNum,
         pageSize: this.pageSize,
         ...this.filterFrom,
@@ -244,82 +238,49 @@
         console.log(this.list);
       });
     },
-    //瀵煎叆
-    importOrg() {
-      this.importSetting.dialogShow = true;
-      this.importSetting.onSuccess = (response, callBack) => {
-        if (response.code === 1) {
-          this.$message.success(response.msg);
-          this.search(1);
-        } else {
-          this.$message.warning(response.msg);
-        }
-        callBack();
-      };
-    },
-    // 瀵煎嚭
-    handleExport() {},
-    // 鏂板
-    handleAdd() {
-      this.editSetting.id = null;
-      this.editSetting.info = null;
-      this.editSetting.title = '鏂板';
-      this.editSetting.show = true;
-    },
-    // 缂栬緫
-    handleEdit(row) {
-      this.editSetting.id = row.id;
-      this.editSetting.info = null;
-      this.editSetting.title = '缂栬緫';
-      this.editSetting.show = true;
-    },
-    // 璇︽儏
-    handleDetail(row) {
-      this.$refs.detailRef.open(row.id);
-    },
-    // 璋冩嫧
+    
+    // 鍏ュ簱
     handleIncome(row) {
-      this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode}  璋冩嫧鍚�?`, '璋冩嫧璋冩嫧')
-        .then(function () {
-          procureIncome({ id: row.id }).then((res) => {
-            this.$message.success('璋冩嫧鎴愬姛锛�');
-            this.search();
-          });
-        })
-        .catch(() => {});
+      this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode}  璋冩嫧鍑哄簱鍚�?`, '璋冩嫧鍑哄簱').then(() => {
+        transfeIncome({ id: row.id })
+          .then((res) => {
+            this.$message.success('璋冩嫧鍑哄簱鎴愬姛锛�');
+            this.search(1);
+          })
+      });
     },
-    del(row) {
-      this.$modal
-        .confirm('鏄惁纭鍒犻櫎璋冩嫧鍗曞彿涓�"' + row.businessFormCode + '"鐨勬暟鎹悧锛�')
-        .then(function () {
-          procureDel({ id: row.id }).then((res) => {});
-        })
-        .then((res) => {
-          this.$message.success('鍒犻櫎鎴愬姛锛�');
-          this.search();
-        })
-        .catch(() => {});
+
+    // 瀵煎嚭
+    handleExport(row) {
+      transferExport({id:row.id}).then(res=>{
+        
+      })
     },
-    // 鍒嗛〉
-    handleSizeChange(pageSize) {
-      this.pageSize = pageSize;
-      this.search({ pageNum: 1 });
-    },
-    handleCurrentChange(pageNum) {
-      this.myTable.paging.page.pageNum = pageNum;
-      this.search({ pageNum: pageNum });
-    },
-    // 鏌ヨtable鍒楄〃
-    search(pageNum) {
-      this.fetchData();
-    },
-    refreshData() {
-      this.pageNum = 1;
-      this.pageSize = 10;
-      this.search();
+
+    // 鎾ら攢
+    handleRevoke(row) {
+      this.$confirm(`鎮ㄧ‘瀹氭挙閿�鍗曞彿涓�"${row.businessFormCode}"  鐨勬暟鎹悧?`, '鎾ら攢').then(() => {
+        transferUpdStatus({ id: row.id })
+          .then((res) => {
+            this.$message.success('鎾ら攢鎴愬姛锛�');
+            this.search(1);
+          })
+      });
     },
     fifterForm(params) {
       this.filterFrom = Object.assign(this.filterFrom, params);
+      if (this.filterFrom.createTimeStart) {
+        this.filterFrom.createTimeStart = this.filterFrom.createTimeStart.replace(/\-/g, '');
+      }
+      if (this.filterFrom.createTimeEnd) {
+        this.filterFrom.createTimeEnd = this.filterFrom.createTimeEnd.replace(/\-/g, '');
+      }
+      if (this.filterFrom.startTime) {
+        this.filterFrom.startTime = this.filterFrom.startTime.replace(/\-/g, '');
+      }
+      if (this.filterFrom.endTime) {
+        this.filterFrom.endTime = this.filterFrom.endTime.replace(/\-/g, '');
+      }
       this.search(1);
     },
   },
diff --git a/admin-web/src/views/stock/transfer/transferissue/detail.vue b/admin-web/src/views/stock/transfer/transferissue/detail.vue
index f126f45..849ea34 100644
--- a/admin-web/src/views/stock/transfer/transferissue/detail.vue
+++ b/admin-web/src/views/stock/transfer/transferissue/detail.vue
@@ -1,124 +1,126 @@
 <template>
-  <el-dialog
-    title="璇︽儏"
-    width="60%"
-    :modal="true"
-    :visible.sync="visible"
-    :top="'15vh'"
-    :close-on-click-modal="false"
-    :append-to-body="true"
-    :destroy-on-close="true"
-    @close="close"
-    class="stock-detail"
-  >
-    <el-row :gutter="20">
-      <el-col :span="8">
-        <span>璋冩嫧鍗曞彿锛�</span>
-        <span>{{ detail.businessFormCode }}</span>
-      </el-col>
-      <el-col :span="8">
-        <span>璋冩嫧浠撳簱锛�</span>
-        <span>{{ detail.warehouseName }}</span>
-      </el-col>
-      <el-col :span="8">
-        <span>鎵�灞炴満鏋勶細</span>
-        <span>{{ detail.agencyId }}</span>
-      </el-col>
-    </el-row>
-    <el-row :gutter="20" style="margin-top: 20px">
-      <el-col :span="8">
-        <span>鐘舵�侊細</span>
-        <span>{{ detail.states == 1 ? '寰呰皟鎷�' : '宸茶皟鎷�' }}</span>
-      </el-col>
-      <el-col :span="8">
-        <span>鍒涘缓浜猴細</span>
-        <span>{{ detail.buyerName }}</span>
-      </el-col>
-      <el-col :span="8">
-        <span>璋冩嫧鏃堕棿锛�</span>
-        <span>{{ detail.incomeTime | formatTime }}</span>
-      </el-col>
-    </el-row>
-    <el-row :gutter="20" style="margin-top: 20px">
-      <el-col class="img-row" :span="24">
-        <span>璋冩嫧鎵嬬画鐓х墖锛�</span>
-        <div class="img-box"></div>
-      </el-col>
-    </el-row>
-    <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.procureGoods" :key="goodsIndex">
+  <win-md class="stock-detail" :title="setting.title" @close="close" :width="'1100px'">
+    <div v-loading="loading">
       <el-row :gutter="20">
-        <el-col :span="8">
-          <span>鐗╁搧鍒嗙被锛�</span>
-          <span>{{ goodsItem.baseCategoryId }}</span>
+        <el-col :span="6">
+          <span>璋冩嫧鍗曞彿锛�</span>
+          <span>{{ detail.businessFormCode }}</span>
         </el-col>
-        <el-col :span="8">
-          <span>鐗╁搧鍚嶇О锛�</span>
-          <span>{{ goodsItem.goodsTemplateName }}</span>
+        <el-col :span="6">
+          <span>璋冩嫧鏈烘瀯锛�</span>
+          <span>{{ detail.outAgencyName }}</span>
         </el-col>
-        <el-col :span="8">
-          <span>渚涜揣鍟嗭細</span>
-          <span>{{ goodsItem.supplier }}</span>
+        <el-col :span="6">
+          <span>璋冩嫧浜猴細</span>
+          <span>{{ detail.outOperatorName || '-' }}</span>
+        </el-col>
+        <el-col :span="6">
+          <span>鎺ユ敹鏈烘瀯锛�</span>
+          <span>{{ detail.inAgencyName }}</span>
         </el-col>
       </el-row>
-      <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px">
-        <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center">
-          <template slot-scope="scope">
-            {{ scope.row.baseGoodsModelsName }}
-          </template>
-        </el-table-column>
-        <el-table-column label="鍗曚綅" align="center">
-          <template slot-scope="scope">
-            {{ scope.row.unit }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center">
-          <template slot-scope="scope">
-            {{ scope.row.price }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center">
-          <template slot-scope="scope">
-            {{ scope.row.counts }}
-          </template>
-        </el-table-column>
-      </el-table>
+      <el-row :gutter="20" style="margin-top: 20px">
+        <el-col :span="6">
+          <span>鐢宠浜猴細</span>
+          <span>{{ detail.operatorName }}</span>
+        </el-col>
+        <el-col :span="6">
+          <span>鐢宠璋冩嫧鏃堕棿锛�</span>
+          <span>{{ detail.createTime | formatTime }}</span>
+        </el-col>
+        <el-col :span="6">
+          <span>鐘舵�侊細</span>
+          <span>{{ getStatesLabel(detail.states) }}</span>
+        </el-col>
+        <el-col :span="6">
+          <span>璋冩嫧鏃堕棿锛�</span>
+          <span>{{ detail.outputTime | formatTime }}</span>
+        </el-col>
+      </el-row>
+      <el-row v-if="fileList && fileList.length" :gutter="20" style="margin-top: 20px">
+        <el-col class="img-row" :span="24">
+          <span>璋冩嫧鎵嬬画鐓х墖锛�</span>
+        <div class="img-box" v-for="(item, index) in fileList" :key="index" @click="handlePreview(item)">
+          <img class="img" :src="getUrl(item.path)" alt="" />
+        </div>
+        </el-col>
+      </el-row>
+      <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.formTransferGoods" :key="goodsIndex">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <span>鐗╁搧鍒嗙被锛�</span>
+            <span>{{ goodsItem.categoryName }}</span>
+          </el-col>
+          <el-col :span="12">
+            <span>鐗╁搧鍚嶇О锛�</span>
+            <span>{{ goodsItem.goodsName }}</span>
+          </el-col>
+        </el-row>
+        <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px">
+          <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center">
+            <template slot-scope="scope">
+              {{ scope.row.baseGoodsModelsName }}
+            </template>
+          </el-table-column>
+          <el-table-column label="鍗曚綅" align="center">
+            <template slot-scope="scope">
+              {{ scope.row.unit }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center">
+            <template slot-scope="scope">
+              {{ scope.row.price }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center">
+            <template slot-scope="scope">
+              {{ scope.row.counts }}
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
     </div>
-  </el-dialog>
+  </win-md>
 </template>
 <script>
-import { procureDetail } from '@/api/stock/procure/purchaseOrder';
+import { transferDetail } from '@/api/stock/transfer';
 import * as DateFormatter from '@/utils/DateFormatter';
+import winMd from '@/components/win/win-md';
+import transfer from '../../../mixins/transfer';
 
 export default {
+  mixins: [transfer],
+  components: { winMd },
+  props: {
+    setting: {
+      type: Object,
+      default: () => {},
+    },
+  },
   data() {
     return {
-      visible: false,
-      detail: {
-        businessFormCode: '',
-        goodsTemplateName: '',
-        agencyId: '',
-        states: '',
-        createName: '',
-        time: '',
-        procureGoods: [{}, {}],
-      },
+      loading: false,
+      detail: {},
+      fileList:[]
     };
   },
-  filters:{
+  filters: {
     formatTime(time) {
-      if(!time) return
-      return DateFormatter.LongToDateTime(time)
-    }
+      if (!time) return '-';
+      return DateFormatter.LongToDateTime(time);
+    },
+  },
+  created() {
+    this.loading = true;
+    transferDetail({ id: this.setting.id }).then((res) => {
+      this.detail = res;
+      this.fileList = this.detail.procureDoc ? JSON.parse(this.detail.procureDoc) : [];
+      this.loading = false;
+    });
   },
   methods: {
-    open(id) {
-      this.visible = true;
-      procureDetail({ id }).then((res) => {
-        this.detail = res;
-      });
-    },
     close() {
-      this.visible = false;
+      this.$emit('close');
     },
   },
 };
diff --git a/admin-web/src/views/stock/transfer/transferissue/edit.vue b/admin-web/src/views/stock/transfer/transferissue/edit.vue
deleted file mode 100644
index 40ccc04..0000000
--- a/admin-web/src/views/stock/transfer/transferissue/edit.vue
+++ /dev/null
@@ -1,495 +0,0 @@
-<template>
-  <win-md class="stock-edit" :title="`${setting.title}璋冩嫧璋冩嫧`" @close="close" :width="'800px'">
-    <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px">
-      <div class="main-w">
-        <el-row :gutter="24" class="headerHeight">
-          <el-col :span="12">
-            <el-form-item label="璋冩嫧浠撳簱" prop="warehouseId">
-              <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%">
-                <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="璋冩嫧鏃堕棿" prop="procureTime">
-              <el-date-picker
-                v-model="formData.procureTime"
-                type="datetime"
-                value="yyyy-MM-dd HH:mm:ss"
-                value-format="yyyyMMddHHmmss"
-                placeholder="璇烽�夋嫨鏃ユ湡"
-                style="width: 100%"
-              >
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="24" class="headerHeight">
-          <el-col :span="12">
-            <el-form-item label="璋冩嫧鎵嬬画" prop="procureDoc">
-              <upload :settings="uploadSettings" @on-change="uploadChange"></upload>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <div class="goods-card" v-for="(goodsItem, goodsIndex) in formData.procureGoods" :key="goodsIndex">
-          <el-row :gutter="24">
-            <el-col :span="12">
-              <el-form-item
-                label="鐗╁搧鍒嗙被"
-                :prop="`procureGoods[${goodsIndex}].baseCategoryIds`"
-                :rules="{
-                  required: true,
-                  message: '璇烽�夋嫨',
-                  trigger: 'change',
-                }"
-              >
-                <el-cascader
-                  v-model="goodsItem.baseCategoryIds"
-                  :options="categoryOptions"
-                  :props="{ value: 'id' }"
-                  @change="categoryChange($event, goodsIndex)"
-                  style="width: 100%"
-                ></el-cascader>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item
-                label="鐗╁搧鍚嶇О"
-                :prop="`procureGoods[${goodsIndex}].baseGoodsTemplateId`"
-                :rules="{
-                  required: true,
-                  message: '璇烽�夋嫨',
-                  trigger: 'change',
-                }"
-              >
-                <el-select
-                  v-model="goodsItem.baseGoodsTemplateId"
-                  placeholder="璇峰厛鎷╃墿鍝佸垎绫�"
-                  filterable
-                  :disabled="!goodsItem.baseCategoryId"
-                  style="width: 100%"
-                  @change="goodsTemplateChange($event, goodsIndex)"
-                >
-                  <el-option
-                    v-for="item in goodsItem.goodsOptions"
-                    :key="item.id"
-                    :label="item.goodsName"
-                    :value="item.id"
-                  />
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-row :gutter="24">
-            <el-col :span="12">
-              <el-form-item
-                label="瑙勬牸鍨嬪彿"
-                :prop="`procureGoods[${goodsIndex}].modelsIds`"
-                :rules="{
-                  required: true,
-                  message: '璇烽�夋嫨',
-                  trigger: 'change',
-                }"
-              >
-                <el-select
-                  v-model="goodsItem.modelsIds"
-                  multiple
-                  placeholder="璇峰厛鎷╃墿鍝佸悕绉�"
-                  :disabled="!goodsItem.baseCategoryId"
-                  @change="modelChange($event, goodsIndex)"
-                  @remove-tag="modelRemoveTag($event, goodsIndex)"
-                  style="width: 100%"
-                >
-                  <el-option
-                    v-for="item in goodsItem.modelsOptions"
-                    :key="item.id"
-                    :label="item.modelName"
-                    :value="item.id"
-                  />
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-table :data="goodsItem.models" :stripe="true">
-            <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center">
-              <template slot-scope="scope">
-                {{ getGoodsModelsName(scope.row.baseGoodsModelsId) }}
-              </template>
-            </el-table-column>
-            <el-table-column label="鍗曚綅" align="center">
-              <template slot-scope="scope">
-                {{ scope.row.unit }}
-              </template>
-            </el-table-column>
-            <el-table-column prop="price" label="鍗曚环锛堝厓锛�" align="center">
-              <template slot-scope="scope">
-                <el-input type="number" v-model="scope.row.price"></el-input>
-              </template>
-            </el-table-column>
-            <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center">
-              <template slot-scope="scope">
-                <el-input type="number" v-model="scope.row.counts"></el-input>
-              </template>
-            </el-table-column>
-          </el-table>
-          <div class="btn-group">
-            <el-button
-              v-if="formData.procureGoods.length > 1"
-              name="绉婚櫎"
-              type="danger"
-              plain
-              size="mini"
-              @click="removeGoods(goodsIndex)"
-              >绉婚櫎</el-button
-            >
-            <el-button
-              v-if="formData.procureGoods.length - 1 == goodsIndex"
-              name="鏂板鐗╁搧"
-              type="primary"
-              plain
-              size="mini"
-              @click="addGoods"
-              >鏂板鐗╁搧</el-button
-            >
-          </div>
-        </div>
-      </div>
-    </el-form>
-    <div slot="footer" align="center" class="dialog-footer">
-      <my-button name="鍙栨秷" site="form" @click="close"/>
-      <my-button name="淇濆瓨" site="form" @click="handleSubmit"/>
-    </div>
-  </win-md>
-</template>
-<script>
-import {
-  goodsTemplate,
-  procureAdd,
-  procureEdit,
-  selectTenantWarehouse,
-  goodsModel,
-  procureDetail,
-} from '@/api/stock/procure/purchaseOrder';
-import { getTree } from '@/api/foudation/classification';
-import MyButton from '@/components/myButton/myButton';
-import winMd from '@/components/win/win-md';
-import upload from '@/components/upload/index';
-import { getUploadUrl } from '@/utils/base';
-
-import SettingIplatform from '../../../../../public/static/config';
-
-export default {
-  components: { MyButton, winMd, upload },
-  props: {
-    setting: {
-      type: Object,
-      default: () => {
-      }
-    }
-  },
-  data() {
-    return {
-      visible: false,
-      loading: false,
-      buyTypeOptions:[{
-        label:'闆嗛噰',
-        value: '1'
-      },{
-        label:'鑷噰',
-        value: '2'
-      }],
-      warehouses: [], // 璋冩嫧浠撳簱鍒楄〃
-      categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃
-      modelList: [], //鍨嬪彿鍒楄〃
-      formData: {
-        warehouseId: '', // 璋冩嫧浠撳簱id
-        procureTime: '', // 璋冩嫧鏃堕棿
-        buyType: '2', // 璋冩嫧鏂瑰紡锛�1锛氶泦閲囷紱2=鑷噰锛�
-        procureGoods: [],
-      },
-      goodsItem: {
-        whFormProcureId: '', // 璋冩嫧鍗旾D
-        baseCategoryIds: '', // 鍒嗙被缂栧彿鏁扮粍
-        baseCategoryId: '', // 鍒嗙被缂栧彿
-        baseGoodsTemplateId: '', // 鐗╁搧妯$増缂栧彿
-        goodsTemplateName: '', // 鐗╁搧妯$増鍚嶇О
-        supplier: '', // 渚涘簲鍟�
-        sort: '', // 鏄剧ず椤哄簭
-        goodsOptions: [], // 鐗╁搧鍒楄〃select
-        modelsOptions: [], //瑙勬牸鍨嬪彿select
-        models: [], // 鐗╁搧鍚嶇О
-        modelsIds: [], //瑙勬牸鍨嬪彿
-      },
-      modelsItem: {
-        baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿
-        price: 0, // 鍗曚环(璋冩嫧闇�瑕侊紝璋冩嫧涓嶉渶瑕�)
-        counts: 0, // 鎿嶄綔鏁伴噺
-        supplier: '', // 渚涘簲鍟�
-        unit: null, //鍗曚綅
-      },
-      rules: {
-        warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        procureTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        buyType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-
-        // procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }],
-        baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-        modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
-      },
-
-      uploadSettings: {
-        title: '涓婁紶',
-        max: 20, // 鏈�澶уぇ灏忥紝鍗曚綅M
-        num: 2, // 鏀寔涓婁紶鍥剧墖涓暟
-        accept: '.jpg,.png', // 闄愬埗鏍煎紡
-        tip: '', // 鎻愮ず 榛樿锛歚鍙兘涓婁紶${this.defaultSettings.num}涓�${this.defaultSettings.accept}鏂囦欢锛屼笖涓嶈秴杩�${this.defaultSettings.max}kb`
-        uploadUrl: getUploadUrl(), // 涓婁紶璺緞
-        multiple: true, // 鏄惁鏀寔鎵归噺涓婁紶
-        disabled: false, // 鏄惁绂佺敤
-        type: 'text', // text/picture
-      },
-    };
-  },
-  created() {
-    this.init()
-  },
-  methods: {
-    async init() {
-      this.getWarehouseList();
-      this.getgoodsTemplate()
-      this.getgoodsModel();
-      // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃
-      const treeRes = await getTree();
-      this.categoryOptions = this.removeEmptyChildren(treeRes);
-      if (this.setting.id) {
-        const detail = await procureDetail({ id:this.setting.id });
-        this.formData = Object.assign(this.formData, detail);
-        this.$set(this.formData,'buyType',this.formData.buyType.toString())
-        this.formData.procureTime = this.formData.procureTime.toString();
-        this.formData.procureGoods.map((item, index) => {
-          // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃
-          let pIds = this.findParentIds(this.categoryOptions, item.baseCategoryId);
-          pIds = pIds.reverse();
-          item.baseCategoryIds = [...pIds, item.baseCategoryId];
-          this.$set(this.formData.procureGoods[index],'modelsIds',item.models.map((v) => v.baseGoodsModelsId))
-          this.getgoodsTemplate(item.baseCategoryId, index);
-          this.getgoodsModel(item.baseGoodsTemplateId, index);
-          return item
-        });
-      } else {
-        this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
-      }
-      this.visible = true;
-    },
-
-    // 鑾峰彇璋冩嫧浠撳簱鍒楄〃
-    getWarehouseList() {
-      selectTenantWarehouse()
-        .then((res) => {
-          this.warehouses = res;
-          if (this.warehouses.length && !this.formData.warehouseId) {
-            // 榛樿閫変腑绗竴涓粨搴�
-            this.formData.warehouseId = this.warehouses[0].id;
-          }
-        })
-        .catch((err) => {
-          console.log('err', err);
-        });
-    },
-
-    removeEmptyChildren(arr) {
-      arr.forEach((item) => {
-        if (!item.children || !item.children.length) {
-          delete item.children;
-        } else {
-          this.removeEmptyChildren(item.children);
-        }
-      });
-      return arr;
-    },
-
-    // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃
-    getgoodsTemplate(id, index) {
-      goodsTemplate({ categoryId: id || '' }).then((res) => {
-        if (index || index == 0) {
-          this.$set(this.formData.procureGoods[index], 'goodsOptions', res);
-        }else {
-          this.goodsTemplatelAll = res;
-        }
-      });
-    },
-
-    // 瑙勬牸鍨嬪彿
-    getgoodsModel(id, index) {
-      goodsModel({ goodsTemplatesId: id || '' }).then((res) => {
-        if (index || index == 0) {
-          this.$set(this.formData.procureGoods[index], 'modelsOptions', res);
-        } else {
-          this.goodsModelAll = res;
-        }
-      });
-    },
-
-    // 鏍规嵁鐗╁搧鍚嶇Оid鑾峰彇鍚嶅瓧
-    getGoodsTemplateName(id) {
-      let item = this.goodsTemplatelAll.find((v) => v.id == id);
-      if (item) {
-        return item.goodsName;
-      }
-      return;
-    },
-
-    // 鏍规嵁瑙勬牸鍨嬪彿id鑾峰彇鍚嶅瓧
-    getGoodsModelsName(id) {
-      let item = this.goodsModelAll.find((v) => v.id == id);
-      if (item) {
-        return item.modelName;
-      }
-      return;
-    },
-
-    // 鐗╁搧鍒嗙被閫夋嫨
-    categoryChange(e, index) {
-      this.formData.procureGoods[index].goodsOptions = []
-      this.formData.procureGoods[index].baseGoodsTemplateId = ''
-      this.formData.procureGoods[index].goodsTemplateName = ''
-      this.formData.procureGoods[index].modelsOptions = []
-      this.formData.procureGoods[index].modelsIds = []
-      this.formData.procureGoods[index].models = []
-
-      this.formData.procureGoods[index].baseCategoryId = e[e.length - 1];
-      // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃
-      this.getgoodsTemplate(e[e.length - 1], index);
-    },
-
-    // 鐗╁搧鍚嶇О鍒楄〃
-    goodsTemplateChange(e, index) {
-      this.formData.procureGoods[index].modelsOptions = []
-      this.formData.procureGoods[index].modelsIds = []
-      this.formData.procureGoods[index].models = []
-
-      this.formData.procureGoods[index].goodsTemplateName = this.getGoodsTemplateName(e)
-      // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃
-      this.getgoodsModel(e, index);
-    },
-
-    // 瑙勬牸鍨嬪彿閫夋嫨
-    modelChange(e, index) {
-      let arr = [...this.formData.procureGoods[index].models];
-      let str = JSON.stringify(arr);
-      e.forEach((item) => {
-        if (str.indexOf(item) == -1) {
-          let temp = this.goodsModelAll.find((v) => v.id == item);
-          arr.push({ ...this.modelsItem, baseGoodsModelsId: item, unit: temp.unit });
-        }
-      });
-      this.formData.procureGoods[index].models = arr;
-    },
-
-    // 瑙勬牸鍨嬪彿绉婚櫎
-    modelRemoveTag(e, index) {
-      let arr = this.formData.procureGoods[index].models;
-      let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e);
-      this.formData.procureGoods[index].models.splice(delIndex, 1);
-    },
-
-    // 涓婁紶
-    uploadChange(e) {
-      console.log('uploadChange', e);
-    },
-
-    // 鐐瑰嚮鏂板鐗╁搧
-    addGoods() {
-      this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem)));
-    },
-
-    // 鐐瑰嚮绉婚櫎
-    removeGoods(index) {
-      this.formData.procureGoods.splice(index, 1);
-    },
-
-    // 鎻愪氦
-    handleSubmit() {
-      this.$refs['ruleForm'].validate((valid) => {
-        if (valid) {
-          console.log('this.formData', this.formData);
-          if (this.setting.id) {
-            procureAdd(this.formData)
-              .then((res) => {
-                this.$message.success('淇濆瓨鎴愬姛锛�');
-                this.close();
-                this.$emit('search');
-              })
-              .catch((err) => {
-                console.log('create err', err);
-                this.$message.error('淇濆瓨澶辫触');
-              });
-          } else {
-            procureEdit(this.formData)
-              .then((res) => {
-                this.$message.success('淇濆瓨鎴愬姛锛�');
-                this.close();
-                this.$emit('search');
-              })
-              .catch((err) => {
-                console.log('edit err', err);
-                this.$message.error('淇濆瓨澶辫触');
-              });
-          }
-        } else {
-          this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��');
-        }
-      });
-    },
-
-    close() {
-      this.formData ={
-        warehouseId: '', // 璋冩嫧浠撳簱id
-        procureTime: '', // 璋冩嫧鏃堕棿
-        procureGoods: [],
-      }
-      this.$emit('close')
-    },
-
-    // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁�
-    findParentIds(dataSource, nodeId) {
-      const parentIds = []; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
-
-      // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣
-      function traverse(node, nodeId) {
-        if (node.id === nodeId) {
-          // 濡傛灉褰撳墠鑺傜偣鐨処D绛変簬瀛愯妭鐐圭殑ID锛屽垯琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣锛屽彲浠ュ紑濮嬪悜涓婃煡鎵剧埗鑺傜偣
-          return true; // 杩斿洖true琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
-        }
-
-        if (node.children) {
-          // 濡傛灉褰撳墠鑺傜偣鏈夊瓙鑺傜偣锛屽垯缁х画閬嶅巻瀛愯妭鐐�
-          for (const childNode of node.children) {
-            if (traverse(childNode, nodeId)) {
-              // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣
-              parentIds.push(node.id);
-              return true;
-            }
-          }
-        }
-
-        return false; // 濡傛灉褰撳墠鑺傜偣涓嶆槸瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欒繑鍥瀎alse
-      }
-
-      // 浠庢牴鑺傜偣寮�濮嬮亶鍘嗘暣妫垫爲锛屽苟璋冪敤閫掑綊鍑芥暟鏌ユ壘瀛愯妭鐐圭殑鎵�鏈夌埗鑺傜偣
-      for (const node of dataSource) {
-        if (traverse(node, nodeId)) {
-          // 濡傛灉鍦ㄥ綋鍓嶈妭鐐圭殑瀛愭爲涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欑洿鎺ラ��鍑哄惊鐜�
-          break;
-        }
-      }
-
-      return parentIds; // 杩斿洖鎵�鏈夌埗鑺傜偣ID鐨勬暟缁�
-    },
-  },
-};
-</script>
-<style scoped lang="scss">
-@import url(../../index.scss);
-</style>
diff --git a/admin-web/src/views/stock/transfer/transferissue/index.vue b/admin-web/src/views/stock/transfer/transferissue/index.vue
index 0c0d7c4..26aa693 100644
--- a/admin-web/src/views/stock/transfer/transferissue/index.vue
+++ b/admin-web/src/views/stock/transfer/transferissue/index.vue
@@ -10,7 +10,7 @@
           <el-col>
             <!--鍒楄〃-->
             <div :style="{ 'overflow-y': 'auto', height: `${clientHeight - 320}px` }" v-loading="loading">
-              <el-row class="card" :gutter="5">
+              <el-row v-if="list.length" class="card" :gutter="5">
                 <el-col v-for="(item, index) in list" :key="index" class="cm-item">
                   <el-card class="card-data">
                     <div class="card-container">
@@ -18,36 +18,59 @@
                         <div class="card-header-left">
                           <span>璋冩嫧鍗曞彿锛�</span>
                           <span class="value">{{ item.businessFormCode }}</span>
+                          <div v-if="item.states == 0" class="states states-warning">寰呭嚭搴�</div>
+                          <div v-if="item.states == 1" class="states states-warning">寰呮帴鏀�</div>
+                          <div v-if="item.states == 2" class="states states-success">宸叉帴鏀�</div>
+                          <div v-if="item.states == 4" class="states states-info">宸叉挙閿�</div>
                         </div>
                         <div class="card-header-right">
-                            <el-button site="form" type="success" size="mini" @click="handleExport(item)"
-                              >瀵煎嚭璋冩嫧鍗�</el-button
-                            >
+                          <el-button
+                            v-if="item.states == 1"
+                            site="form"
+                            type="success"
+                            size="mini"
+                            >瀵煎嚭璋冩嫧鍑哄簱鍗�</el-button
+                          >
+                          <el-button
+                            v-if="item.states == 0"
+                            site="form"
+                            type="success"
+                            size="mini"
+                            @click="handleOutput(item)"
+                            >鍑哄簱</el-button
+                          >
+                          <el-button
+                            v-if="item.states == 2"
+                            site="form"
+                            type="primary"
+                            size="mini"
+                            >瀵煎嚭璋冩嫧鍏ュ簱鍗�</el-button
+                          >
                           <el-button name="鏌ョ湅璇︽儏" site="form" type="info" size="mini" @click="handleDetail(item)"
                             >鏌ョ湅璇︽儏</el-button
                           >
                         </div>
                       </div>
                       <div class="one-hed">
-                        <div class="box"><span class="span-two">鎺ユ敹鏈烘瀯锛�</span>{{ item.agencyId }}</div>
-                        <div class="box"><span class="span-two">鐢宠浜猴細</span>{{ item.buyerName }}</div>
+                        <div class="box"><span class="span-two">鎺ユ敹鏈烘瀯锛�</span>{{ item.inAgencyName }}</div>
+                        <div class="box"><span class="span-two">鐢宠浜猴細</span>{{ item.operatorName }}</div>
                         <div class="box">
-                          <span class="span-two">鐢宠璋冩嫧鏃堕棿锛�</span>{{ item.procureTime | formatTime }}
+                          <span class="span-two">鐢宠璋冩嫧鏃堕棿锛�</span>{{ item.createTime | formatTime }}
                         </div>
                         <div class="box">
                           <span class="span-two">鎺ユ敹鏃堕棿锛�</span>{{ item.procureTime | formatTime }}
                         </div>
                       </div>
                       <div class="one-hed">
-                        <div class="box"><span class="span-two">璋冩嫧鏈烘瀯锛�</span>{{ item.agencyId }}</div>
-                        <div class="box"><span class="span-two">璋冩嫧浜猴細</span>{{ item.buyerName }}</div>
+                        <div class="box"><span class="span-two">璋冩嫧鏈烘瀯锛�</span>{{ item.outAgencyName }}</div>
+                        <div class="box"><span class="span-two">璋冩嫧浜猴細</span>{{ item.outOperatorName }}</div>
                         <div class="box">
                           <span class="span-two">璋冩嫧鏃堕棿锛�</span>{{ item.procureTime | formatTime }}
                         </div>
                       </div>
                       <div class="card-end">
-                        <div v-for="(just, index) in item.fromProcureTemplateInfoList" :key="index" class="item">
-                          <div class="name">{{ just.goodsTemplateName }}</div>
+                        <div v-for="(just, index) in item.fromTransferTemplateInfoList" :key="index" class="item">
+                          <div class="name">{{ just.goodsName }}</div>
                           <div class="value-box">
                             <div class="value-box-item">
                               <span class="label">鏁伴噺锛�</span>
@@ -61,6 +84,7 @@
                   </el-card>
                 </el-col>
               </el-row>
+              <div class="no-data" v-else>鏆傛棤鏁版嵁</div>
             </div>
             <el-pagination
               :small="false"
@@ -76,30 +100,28 @@
         </el-row>
       </el-card>
     </el-container>
-    <!--娣诲姞/缂栬緫寮圭獥-->
-    <edit v-if="editSetting.show" :setting="editSetting" ref="editRef" @close="editSetting.show=false" @search="refreshData"></edit>
-    <detail ref="detailRef"></detail>
-    <my-import
-      :import-setting="importSetting"
-      :dialog-show="importSetting.dialogShow"
-      :dialog-title="importSetting.dialogTitle"
-    />
+    <detail
+      v-if="detailSetting.show"
+      :setting="detailSetting"
+      @close="detailSetting.show = false"
+      ref="detailRef"
+    ></detail>
   </div>
 </template>
 
 <script>
-import { procureList, procureDel, procureIncome } from '@/api/stock/procure/purchaseOrder';
+import { transferList,transferOutput } from '@/api/stock/transfer';
 import MyButton from '@/components/myButton/myButton';
-import SettingIplatform from '@/utils/settingIplatform';
 import myImport from '@/views/components/myImport';
-import edit from './edit';
 import detail from './detail';
-import { getBaseUrl } from '@/utils/base';
-import * as DateFormatter from '@/utils/DateFormatter';
+import listPage from '../../../mixins/listPage';
+import transfer from '../../../mixins/transfer';
+import { commonsApi } from '@/api/commonsApi';
 
 export default {
   name: 'index',
-  components: { MyButton, myImport, edit, detail },
+  mixins: [listPage, transfer],
+  components: { MyButton, myImport, detail },
   data() {
     return {
       loading: false,
@@ -122,19 +144,22 @@
           defaultValue: '',
         },
         {
-          type: 'select',
-          dataIndex: 'name',
-          label: '鏈烘瀯',
+          type: 'cascader',
+          dataIndex: 'outAgencyId',
+          label: '璋冩嫧鏈烘瀯',
           placeholder: '璇烽�夋嫨',
+          optionsConfig: { url: commonsApi.cascader_tree_fin_tenant, props: null },
           defaultValue: '',
           options: [],
         },
         {
-          type: 'text',
-          dataIndex: 'buyerName',
-          label: '鍒涘缓浜�',
-          placeholder: '璇疯緭鍏�',
+          type: 'cascader',
+          dataIndex: 'inAgencyId',
+          label: '鎺ユ敹鏈烘瀯',
+          placeholder: '璇烽�夋嫨',
+          optionsConfig: { url: commonsApi.cascader_tree_fin_tenant, props: null },
           defaultValue: '',
+          options: [],
         },
         {
           type: 'select',
@@ -142,90 +167,48 @@
           label: '鐘舵��',
           placeholder: '璇烽�夋嫨',
           defaultValue: '',
-          options: [
-            {
-              label: '鍏ㄩ儴',
-              value: '',
-            },
-            {
-              label: '寰呰皟鎷�',
-              value: '1',
-            },
-            {
-              label: '宸茶皟鎷�',
-              value: '2',
-            },
-          ],
+          options: [],
         },
         {
           type: 'date-picker',
-          dataIndex: 'val1',
-          label: '璋冩嫧鏃堕棿',
+          dataIndex: 'createTimeStart',
+          label: '鐢宠鏃堕棿',
           defaultValue: '',
         },
         {
           type: 'date-picker',
-          dataIndex: 'val2',
+          dataIndex: 'createTimeEnd',
+          label: '鑷�',
+          defaultValue: '',
+        },
+        {
+          type: 'date-picker',
+          dataIndex: 'startTime',
+          label: '鎺ユ敹鏃堕棿',
+          defaultValue: '',
+        },
+        {
+          type: 'date-picker',
+          dataIndex: 'endTime',
           label: '鑷�',
           defaultValue: '',
         },
       ],
-      // 鏍戞暟鎹�
-      treeDataList: [],
-      // 鎼滅储鏉′欢
-      filterFrom: {
-        tenantId: null,
-        userName: null,
-        userPhone: null,
-        states: null,
-      },
-      // 瀵煎叆
-      importSetting: {
-        dialogTitle: '瀵煎叆',
-        dialogShow: false,
-        fileSettings: {
-          data: {},
-          uploadUrl: getBaseUrl() + '/pc/fin/sys/tenant/import', // 涓婁紶鍦板潃
-          accept: '.xls', // 鏍煎紡
-          type: 'text', // 鍥炴樉褰㈠紡
-          loading: false, // 瀵煎叆鏁堟灉
-        },
-        /* 妯℃澘涓嬭浇 */
-        templateSettings: {
-          templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О
-          templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate', // 涓嬭浇鍦板潃
-        },
-        onSuccess: null,
-      },
-      editSetting: {
-        title: '',
-        id: '',
-        orgId: '',
-        show: false,
-      },
-      pageNum: 1,
-      pageSize: 10,
-      total: 0,
     };
-  },
-  computed: {
-    clientHeight() {
-      return document.documentElement.clientHeight;
-    },
-  },
-  filters: {
-    formatTime(time) {
-      if (!time) return;
-      return DateFormatter.LongToDateTime(time);
-    },
   },
   created() {
     this.fetchData();
+    this.items.map((v) => {
+      if (v.label == '鐘舵��') {
+        v.options = this.statesOptions;
+      }
+      return v;
+    });
   },
   methods: {
     fetchData() {
       this.loading = true;
-      procureList({
+      transferList({
         pageNum: this.pageNum,
         pageSize: this.pageSize,
         ...this.filterFrom,
@@ -236,82 +219,29 @@
         console.log(this.list);
       });
     },
-    //瀵煎叆
-    importOrg() {
-      this.importSetting.dialogShow = true;
-      this.importSetting.onSuccess = (response, callBack) => {
-        if (response.code === 1) {
-          this.$message.success(response.msg);
-          this.search(1);
-        } else {
-          this.$message.warning(response.msg);
-        }
-        callBack();
-      };
-    },
-    // 瀵煎嚭
-    handleExport() {},
-    // 鏂板
-    handleAdd() {
-      this.editSetting.id = null;
-      this.editSetting.info = null;
-      this.editSetting.title = '鏂板';
-      this.editSetting.show = true;
-    },
-    // 缂栬緫
-    handleEdit(row) {
-      this.editSetting.id = row.id;
-      this.editSetting.info = null;
-      this.editSetting.title = '缂栬緫';
-      this.editSetting.show = true;
-    },
-    // 璇︽儏
-    handleDetail(row) {
-      this.$refs.detailRef.open(row.id);
-    },
-    // 璋冩嫧
-    handleIncome(row) {
-      this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode}  璋冩嫧鍚�?`, '璋冩嫧璋冩嫧')
-        .then(function () {
-          procureIncome({ id: row.id }).then((res) => {
-            this.$message.success('璋冩嫧鎴愬姛锛�');
-            this.search();
-          });
-        })
-        .catch(() => {});
-    },
-    del(row) {
-      this.$modal
-        .confirm('鏄惁纭鍒犻櫎璋冩嫧鍗曞彿涓�"' + row.businessFormCode + '"鐨勬暟鎹悧锛�')
-        .then(function () {
-          procureDel({ id: row.id }).then((res) => {});
-        })
-        .then((res) => {
-          this.$message.success('鍒犻櫎鎴愬姛锛�');
-          this.search();
-        })
-        .catch(() => {});
-    },
-    // 鍒嗛〉
-    handleSizeChange(pageSize) {
-      this.pageSize = pageSize;
-      this.search({ pageNum: 1 });
-    },
-    handleCurrentChange(pageNum) {
-      this.myTable.paging.page.pageNum = pageNum;
-      this.search({ pageNum: pageNum });
-    },
-    // 鏌ヨtable鍒楄〃
-    search(pageNum) {
-      this.fetchData();
-    },
-    refreshData() {
-      this.pageNum = 1;
-      this.pageSize = 10;
-      this.search();
+    handleOutput(row) {
+      this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode}  璋冩嫧鍑哄簱鍚�?`, '璋冩嫧鍑哄簱').then(() => {
+        transferOutput({ id: row.id })
+          .then((res) => {
+            this.$message.success('璋冩嫧鍑哄簱鎴愬姛锛�');
+            this.search(1);
+          })
+      });
     },
     fifterForm(params) {
       this.filterFrom = Object.assign(this.filterFrom, params);
+      if (this.filterFrom.createTimeStart) {
+        this.filterFrom.createTimeStart = this.filterFrom.createTimeStart.replace(/\-/g, '');
+      }
+      if (this.filterFrom.createTimeEnd) {
+        this.filterFrom.createTimeEnd = this.filterFrom.createTimeEnd.replace(/\-/g, '');
+      }
+      if (this.filterFrom.startTime) {
+        this.filterFrom.startTime = this.filterFrom.startTime.replace(/\-/g, '');
+      }
+      if (this.filterFrom.endTime) {
+        this.filterFrom.endTime = this.filterFrom.endTime.replace(/\-/g, '');
+      }
       this.search(1);
     },
   },

--
Gitblit v1.9.1