Browse Source

出库单字段对接

sunlupeng 7 tháng trước cách đây
mục cha
commit
169ab3d1be

+ 4 - 4
config/dev.env.js

@@ -2,12 +2,12 @@ module.exports = {
 	NODE_ENV: '"development"',
 	ENV_CONFIG: '"dev"',
   // 本地数据库:登录用户名 admin123,密码 admin123
-  BASE_API: '"http://192.168.100.188:9085/admin"',
-  OS_API: '"http://192.168.100.188:9085/admin"',
+  // BASE_API: '"http://192.168.100.188:9085/admin"',
+  // OS_API: '"http://192.168.100.188:9085/admin"',
   // BASE_API: '"http://47.103.79.143:9085/admin"',
   // OS_API: '"http://47.103.79.143:9085/admin"',
-  // OS_API: '"https://xiaoyou.dgtis.com/admin"',
-  // BASE_API: '"https://xiaoyou.dgtis.com/admin"',
+  OS_API: '"https://xiaoyou.dgtis.com/admin"',
+  BASE_API: '"https://xiaoyou.dgtis.com/admin"',
   
   
   

+ 49 - 0
src/api/retrieval.js

@@ -0,0 +1,49 @@
+import request from '@/utils/request'
+
+export function listWarehousing(query) {
+  return request({
+    url: '/warehouse-entry/page',
+    method: 'get',
+    params: query
+  })
+}
+
+export function executeWarehousing(query) {
+  return request({
+    url: '/warehouse-entry/execute',
+    method: 'post',
+    params:query
+  })
+}
+
+export function createWarehousing(data) {
+  return request({
+    url: '/warehouse-entry/add',
+    method: 'post',
+    data
+  })
+}
+
+export function readWarehousing(query) {
+  return request({
+    url: '/warehouse-entry/info',
+    method: 'get',
+    params:query
+  })
+}
+
+export function updateWarehousing(data) {
+  return request({
+    url: '/warehouse-entry/edit',
+    method: 'post',
+    data
+  })
+}
+
+export function deleteWarehousing(query) {
+  return request({
+    url: '/warehouse-entry/remove',
+    method: 'post',
+    params:query
+  })
+}

+ 8 - 0
src/api/store.js

@@ -8,6 +8,14 @@ export function listStore(query) {
   })
 }
 
+export function storeList(query) {
+  return request({
+    url: '/store-info/list',
+    method: 'get',
+    params: query
+  })
+}
+
 export function createStore(data) {
   return request({
     url: '/store-info/add',

+ 4 - 0
src/permission.js

@@ -120,6 +120,10 @@ const myRoles = [
   'warehousingAdd',
   'warehousingEdit',
   'warehousingDetail',
+  'retrieval',
+  'retrievalAdd',
+  'retrievalEdit',
+  'retrievalDetail',
 
   'dictManage', 
   'dictList', 

+ 6 - 0
src/router/index.js

@@ -91,10 +91,16 @@ export const asyncRouterMap = [
       name: 'stock',
       meta: { title: '仓库管理', icon: 'shangpin' },
       children: [
+        // 入库单
         { path: 'warehousing', component: _import('stock/warehousing/warehousing'), name: 'warehousing', meta: { title: '入库单', noCache: true }},
         { path: 'warehousingAdd', component: _import('stock/warehousing/warehousingAdd'), name: 'warehousingAdd', meta: { title: '新增入库单', noCache: false, hideTag: true, hidden: true }},
         { path: 'warehousingEdit/:id', component: _import('stock/warehousing/warehousingAdd'), name: 'warehousingEdit', meta: { title: '编辑入库单', noCache: false, hideTag: true, hidden: true }},
         { path: 'warehousingDetail/:id', component: _import('stock/warehousing/warehousingAdd'), name: 'warehousingDetail', meta: { title: '入库单详情', noCache: false, hideTag: true, hidden: true }},
+        // 出库单
+        { path: 'retrieval', component: _import('stock/retrieval/retrieval'), name: 'retrieval', meta: { title: '出库单', noCache: true }},
+        { path: 'retrievalAdd', component: _import('stock/retrieval/retrievalAdd'), name: 'retrievalAdd', meta: { title: '新增出库单', noCache: false, hideTag: true, hidden: true }},
+        { path: 'retrievalEdit/:id', component: _import('stock/retrieval/retrievalAdd'), name: 'retrievalEdit', meta: { title: '编辑出库单', noCache: false, hideTag: true, hidden: true }},
+        { path: 'retrievalDetail/:id', component: _import('stock/retrieval/retrievalAdd'), name: 'retrievalDetail', meta: { title: '出库单详情', noCache: false, hideTag: true, hidden: true }},
       ]
     },
   

+ 3 - 3
src/views/basicSetting/supplier.vue

@@ -1,4 +1,4 @@
-categoryOptions<template>
+<template>
     <div class="app-container calendar-list-container">
 
         <!-- 查询和其他操作 -->
@@ -320,7 +320,7 @@ export default {
         }
     },
     created() {
-        this.getListCategory();
+        this.getListDept();
         this.getTypeList();
         this.getList();
     },
@@ -328,7 +328,7 @@ export default {
         handleDownLoad(){
             window.location.href = process.env.BASE_API + '/product/export/category?supplierName=' + this.listQuery.supplierName + '&supplierNum=' + this.listQuery.supplierNum;
         },
-        getListCategory() {
+        getListDept() {
             listDept().then(response => {
                 this.categoryOptions = this.handleTree(response.data.data, "deptId");
             });

+ 327 - 0
src/views/stock/retrieval/retrieval.vue

@@ -0,0 +1,327 @@
+<template>
+  <div class="app-container calendar-list-container">
+    <!-- 查询和其他操作 -->
+    <div class="filter-container">
+      <el-date-picker v-model="listQuery.startDate" value-format="yyyy-MM-dd" type="date" placeholder="开始日期"
+        style="width:200px">
+      </el-date-picker>
+      <el-date-picker v-model="listQuery.endDate" value-format="yyyy-MM-dd" type="date" placeholder="结束日期"
+        style="width:200px">
+      </el-date-picker>
+      <treeselect class="filter-item" default-expand-all v-model="listQuery.requireDepartmentId" :options="deptOptions"
+                :normalizer="normalizer" placeholder="要货部门" style="width: 200px" />
+      <el-select v-model="listQuery.storeId" clearable placeholder="门店" class="filter-item" style="width: 200px">
+        <el-option :key="item.id" v-for="item in storeList" :label="item.storeName" :value="item.id">
+        </el-option>
+      </el-select>
+      <el-select v-model="listQuery.warehouseId" clearable placeholder="仓库" class="filter-item" style="width: 200px">
+        <el-option :key="item.id" v-for="item in warehouseList" :label="item.warehouseName" :value="item.id">
+        </el-option>
+      </el-select>
+      
+      <el-select v-model="listQuery.isRunFinish" clearable placeholder="发货状态" class="filter-item" style="width: 200px">
+        <el-option :key="item.type" v-for="item in typeList" :label="item.name" :value="item.type">
+        </el-option>
+      </el-select>
+      <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">查找</el-button>
+      <el-button class="filter-item" v-waves icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      <el-button class="filter-item" type="primary" @click="handleCreate" icon="el-icon-plus">添加</el-button>
+      <!-- <el-button class="filter-item" :loading="downloadLoading" v-waves icon="el-icon-download"
+        @click="handleDownload">导出</el-button> -->
+      <!-- <el-button class="filter-item" type="success" icon="el-icon-takeaway-box" @click="executeAll">批量入库</el-button> -->
+      <el-button class="filter-item" type="warning" icon="el-icon-delete" @click="delAll">批量删除</el-button>
+    </div>
+
+    <!-- 查询结果 -->
+    <el-table size="small" :data="list" @selection-change="handleSelectionChange" v-loading="listLoading"
+      element-loading-text="正在查询中。。。" border fit highlight-current-row>
+      <el-table-column type="selection" width="55px"> </el-table-column>
+      <el-table-column type="index" label="序号" header-align="center" align="center">
+      </el-table-column>
+      <el-table-column align="center" min-width="150px" label="要货单号">
+        <template slot-scope="scope">
+          <router-link :to="{ name: 'warehousingDetail', params: { id: scope.row.id } }">
+            <div style="color: #337ab7;cursor: pointer;">{{ scope.row.serialCode }}</div>
+          </router-link>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" min-width="100px" label="要货时间" prop="serialDate">
+      </el-table-column>
+      <el-table-column align="center" min-width="100px" label="要货部门" prop="requireDepartmentName">
+      </el-table-column>
+      <el-table-column align="center" min-width="100px" label="门店" prop="storeName">
+      </el-table-column>
+      <el-table-column align="center" min-width="100px" label="仓库" prop="warehouseName">
+      </el-table-column>
+      <el-table-column align="center" min-width="100px" label="发货状态">
+        <template slot-scope="props">
+            <span v-if="props.row.isRunFinish == '0'" style="color: #67C23A;font-weight: bold;">已发货</span>
+            <span v-if="props.row.isRunFinish == '1'" style="color: #E6A23C;font-weight: bold;">待发货</span>
+          </template>
+      </el-table-column>
+      <el-table-column align="center" label="操作" width="240px" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button v-if="scope.row.isRunFinish == '1'" type="success" size="small" @click="handleExecute(scope.row)">入库</el-button>
+          <el-button type="primary" size="small" @click="handleUpdate(scope.row)">编辑</el-button>
+          <el-button type="danger" size="small" @click="handleDelete(scope.row)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 分页 -->
+    <div class="pagination-container">
+      <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+        :current-page="listQuery.page" :page-sizes="[10, 20, 30, 50]" :page-size="listQuery.limit"
+        layout="total, sizes, prev, pager, next, jumper" :total="total">
+      </el-pagination>
+    </div>
+  </div>
+</template>
+<script>
+import { listWarehousing, deleteWarehousing, executeWarehousing } from "@/api/retrieval";
+import { storeList } from "@/api/store";
+import { warehouseList } from "@/api/warehouse";
+import { listDept } from "@/api/dept";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import waves from "@/directive/waves"; // 水波纹指令
+
+export default {
+  components: { Treeselect },
+  directives: { waves },
+  data() {
+    return {
+      // 树选项
+      deptOptions: [],
+      downloadLoading: false,
+      storeList: [],
+      warehouseList: [],
+      typeList: [
+        {
+          type: '0',
+          name: "已发货",
+        },
+        {
+          type: '1',
+          name: "待发货",
+        },
+      ],
+      list: [
+
+      ],
+      delarr: [],
+      multipleSelection: [],
+      total: 0,
+      listLoading: false,
+      listQuery: {
+        page: 1,
+        limit: 10,
+        startDate: '',
+        endDate: '',
+        responsibleDept: undefined,
+        storeId: '',
+        warehouseId: '',
+        isRunFinish: '',
+      },
+    }
+  },
+  created() {
+    this.getStoreList();
+    this.getWarehouseList();
+    this.getList();
+    this.getListDept();
+  },
+  methods: {
+    getListDept() {
+            listDept().then(response => {
+                this.deptOptions = this.handleTree(response.data.data, "deptId");
+            });
+        },
+        /** 转换部门数据结构 */
+        normalizer(node) {
+            if (node.children && !node.children.length) {
+                delete node.children;
+            }
+            return {
+                id: node.deptId,
+                label: node.deptName,
+                children: node.children
+            };
+        },
+    /** 获取仓库列表数据 */
+    getStoreList() {
+      storeList().then(response => {
+        this.storeList = response.data.data;
+      }).catch(() => { });
+    },
+    /** 获取仓库列表数据 */
+    getWarehouseList() {
+      warehouseList().then(response => {
+        this.warehouseList = response.data.data;
+      }).catch(() => { });
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.listQuery = {
+        page: 1,
+        limit: 10,
+        page: 1,
+        limit: 10,
+        startDate: '',
+        endDate: '',
+        responsibleDept: undefined,
+        storeId: '',
+        warehouseId: '',
+        isRunFinish: '',
+      },
+        this.getList()
+    },
+    handleDownload() {
+      this.downloadLoading = true
+      import('@/vendor/Export2Excel').then(excel => {
+        const tHeader = ['用户ID', '用户名称', '用户昵称', '用户头像']
+        const filterVal = ['id', 'username', 'nickname', 'avatar']
+        excel.export_json_to_excel2(tHeader, this.list, filterVal, '用户信息')
+        this.downloadLoading = false
+      })
+    },
+    handleCreate() {
+      this.$router.push({
+        name: 'warehousingAdd',
+        // params: { callback: this.getList }
+      })
+    },
+    getList() {
+      this.listLoading = true
+      listWarehousing(this.listQuery).then(response => {
+        this.list = response.data.data.items
+        this.total = response.data.data.total
+        this.listLoading = false
+      }).catch(() => {
+        this.list = []
+        this.total = 0
+        this.listLoading = false
+      })
+    },
+
+    handleFilter() {
+      this.listQuery.page = 1
+      this.getList()
+    },
+
+    handleSizeChange(val) {
+      this.listQuery.limit = val
+      this.getList()
+    },
+
+    handleCurrentChange(val) {
+      this.listQuery.page = val
+      this.getList()
+    },
+
+    handleUpdate(row) {
+      this.$router.push({
+        name: 'warehousingEdit',
+        params: { id: row.id }
+      })
+    },
+    handleExecute(row) {
+      this.$confirm('确认入库吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        executeWarehousing({ ids: row.id }).then(response => {
+          this.$notify({
+            title: '成功',
+            message: '入库成功',
+            type: 'success',
+            duration: 2000
+          })
+          this.getList()
+        })
+      }).catch(() => { })
+    },
+    executeAll() {
+      const length = this.multipleSelection.length;
+      if (length > 0) {
+        this.$confirm("确认入库吗?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        }).then(() => {
+          for (let i = 0; i < length; i++) {
+            this.delarr.push(this.multipleSelection[i].id);
+          }
+          const ids = this.delarr.join(",");
+          executeWarehousing({ ids: ids }).then(() => {
+            this.$notify({
+              title: "成功",
+              message: "入库成功",
+              type: "success",
+              duration: 2000,
+            });
+            this.getList();
+          })
+        })
+      } else {
+        this.$notify({
+          title: "提示",
+          message: "请选择要入库的信息!",
+          type: "warning",
+        });
+      }
+    },
+    handleDelete(row) {
+      this.$confirm('确认删除吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        deleteWarehousing({ ids: row.id }).then(response => {
+          this.$notify({
+            title: '成功',
+            message: '删除成功',
+            type: 'success',
+            duration: 2000
+          })
+          this.getList()
+        })
+      }).catch(() => { })
+    },
+    delAll() {
+      const length = this.multipleSelection.length;
+      if (length > 0) {
+        this.$confirm("确认删除吗?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        }).then(() => {
+          for (let i = 0; i < length; i++) {
+            this.delarr.push(this.multipleSelection[i].id);
+          }
+          const ids = this.delarr.join(",");
+          deleteWarehousing({ ids: ids }).then(() => {
+            this.$notify({
+              title: "成功",
+              message: "删除成功",
+              type: "success",
+              duration: 2000,
+            });
+            this.getList();
+          })
+        })
+      } else {
+        this.$notify({
+          title: "提示",
+          message: "请选择要删除的信息!",
+          type: "warning",
+        });
+      }
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+  }
+}
+</script>

+ 306 - 0
src/views/stock/retrieval/retrievalAdd.vue

@@ -0,0 +1,306 @@
+<template>
+    <div class="app-container">
+        <el-form ref="dataForm" :model="dataForm" :rules="rules" label-width="120px" inline>
+            <h3>通用要货单</h3>
+            <el-form-item label="要货时间" prop="serialDate">
+                <el-date-picker v-model="dataForm.serialDate" value-format="yyyy-MM-dd HH:mm:ss" type="datetime"
+                    placeholder="选择日期时间" style="width:200px" :disabled="type === 'detail'">
+                </el-date-picker>
+            </el-form-item>
+            <el-form-item label="要货部门" prop="requireDepartmentId">
+                <treeselect class="filter-item" default-expand-all v-model="dataForm.requireDepartmentId" :options="deptOptions"
+                :normalizer="normalizer" placeholder="要货部门" style="width: 200px" :disabled="type === 'detail'"/>
+            </el-form-item>
+            <el-form-item label="门店" prop="storeId">
+                <el-select v-model="dataForm.storeId" clearable placeholder="请选择" style="width: 200px;" :disabled="type === 'detail'">
+                    <el-option :key="item.id" v-for="item in storeList" :label="item.storeName" :value="item.id">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="仓库" prop="warehouseId">
+                <el-select v-model="dataForm.warehouseId" clearable placeholder="请选择" style="width: 200px;" :disabled="type === 'detail'">
+                    <el-option :key="item.id" v-for="item in warehouseList" :label="item.warehouseName" :value="item.id">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="备注" prop="remarks">
+                <el-input style="width:535px" v-model="dataForm.remarks" :maxlength="120"
+                    type="textarea" :disabled="type === 'detail'" :autosize="{ minRows: 1, maxRows: 4 }"
+                    placeholder="请输入备注 最大120字"></el-input>
+            </el-form-item>
+            <div class="mx">
+        <h3>要货明细</h3>
+        <el-button size="small" type="primary" v-if="type !== 'detail'"
+          @click="handleSelectGoods" icon="el-icon-plus">商品/物料</el-button>
+      </div>
+      <el-table size="small" :data="dataForm.inventoryOutInfos" border :cell-style="{ textAlign: 'center' }"
+            :header-cell-style="{ textAlign: 'center' }" style="width: 100%">
+            <el-table-column label="商品编号">
+              <template slot-scope="scope">
+                {{ scope.row.productCode }}
+              </template>
+            </el-table-column>
+            <el-table-column label="商品名称">
+              <template slot-scope="scope">
+                {{ scope.row.productName }}
+              </template>
+            </el-table-column>
+            <el-table-column label="单价(¥)">
+              <template slot-scope="scope">
+                {{ scope.row.createPrice.toFixed(2) }}
+              </template>
+            </el-table-column>
+            <el-table-column label="库存数量">
+              <template slot-scope="scope">
+                {{ scope.row.createProductNumber }}
+              </template>
+            </el-table-column>
+            <el-table-column label="出库数量">
+              <template slot-scope="scope">
+                <el-form-item v-if="type !== 'detail'" :prop="'inventoryOutInfos.'+scope.$index+'.updateNumber'" :rules="{ required: true, message: '入库数量不能为空', trigger: 'blur' }" class="tableFormItem">
+                    <el-input-number v-model="scope.row.updateNumber" @change="handleChange(scope.row)" size="small" :min="1" :max="10000" placeholder="入库数量"></el-input-number>
+                </el-form-item>
+                <span v-else>{{ scope.row.updateNumber }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="金额(¥)">
+              <template slot-scope="scope">
+                <el-form-item v-if="type !== 'detail'" :prop="'inventoryOutInfos.'+scope.$index+'.sellPrice'"
+                    :rules="{ required: true, pattern: /^(([1-9]{1}\d{0,9})|(0{1}))(\.\d{1,2})?$/, message: '请输入合法的金额数字,最多两位小数',trigger: 'blur' }">
+                    <el-input v-model="scope.row.sellPrice" size="small" placeholder="金额"></el-input>
+                  </el-form-item>
+                <span v-else>{{ scope.row.sellPrice.toFixed(2) }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="合计(¥)">
+              <template slot-scope="scope">
+                {{ scope.row.sumPrice.toFixed(2) }}
+              </template>
+            </el-table-column>
+            <el-table-column label="备注">
+              <template slot-scope="scope">
+                <el-input :maxlength="99" v-model="scope.row.remark" :disabled="type === 'detail'" />
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" width="150" v-if="type !== 'detail'">
+              <template slot-scope="scope">
+                <el-button size="mini" type="danger"
+                  @click="dataForm.inventoryOutInfos.splice(scope.$index, 1)">删除</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-form>
+        <div class="footer">
+            <el-button type="primary" @click="submitForm" v-if="type !== 'detail'">保存
+            </el-button>
+            <el-button @click="roBack()">返回
+            </el-button>
+        </div>
+    </div>
+</template>
+<script>
+import { createWarehousing, updateWarehousing, readWarehousing } from "@/api/retrieval";
+import { storeList } from "@/api/store";
+import { warehouseList } from "@/api/warehouse";
+import { listDept } from "@/api/dept";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import waves from "@/directive/waves"; // 水波纹指令
+
+export default {
+    components: { Treeselect },
+    directives: { waves },
+    data() {
+        return {
+            // 树选项
+            deptOptions: [],
+            recipientsList:[],
+            storeList: [],
+            warehouseList: [],
+            id: '',
+            type: '',
+            /** 表单*/
+            dataForm: {
+                serialDate:'',
+                requireDepartmentId:undefined,
+                storeId:undefined,
+                warehouseId:undefined,
+                remarks:undefined,
+                inventoryOutInfos: []
+            },
+            rules: {
+                serialDate: [
+                    { required: true, message: '请选择出库时间', trigger: 'blur' }
+                ],
+                requireDepartmentId: [
+                    { required: true, message: '请选择要货部门', trigger: 'blur' }
+                ],
+                warehouseId: [
+                    { required: true, message: '请选择仓库', trigger: 'blur' }
+                ],
+            },
+        }
+    },
+    watch: {
+        $route: {
+            immediate: true,
+            handler(newVal) {
+                if (this.$route.name === 'warehousingAdd') {
+                    this.dataForm = {
+                        serialDate:undefined,
+                        storeId:undefined,
+                        warehouseId:undefined,
+                        addHandlerId:undefined,
+                        fileIds:undefined,
+                        fileList: [],
+                        inventoryOutInfos: []
+                    }
+                } else if (this.$route.name === 'warehousingDetail') {
+                    this.type = 'detail'
+                }
+                if (this.$route.params.id) {
+                    this.id = this.$route.params.id
+                    this.getDataFormDetail()
+                }
+            }
+        }
+    },
+    mounted() {
+        this.getStoreList();
+        this.getWarehouseList(); 
+        this.getListDept();
+    },
+    methods: {
+        getListDept() {
+            listDept().then(response => {
+                this.deptOptions = this.handleTree(response.data.data, "deptId");
+            });
+        },
+        /** 转换部门数据结构 */
+        normalizer(node) {
+            if (node.children && !node.children.length) {
+                delete node.children;
+            }
+            return {
+                id: node.deptId,
+                label: node.deptName,
+                children: node.children
+            };
+        },
+        /** 获取门店列表数据 */
+        getStoreList(){
+            storeList().then(response => {
+                this.storeList = response.data.data;
+            }).catch(() => { });
+        },
+        /** 获取仓库列表数据 */
+        getWarehouseList() {
+            warehouseList().then(response => {
+                this.warehouseList = response.data.data;
+            }).catch(() => {});
+        },
+        /** 获取详情页面数据 */
+        getDataFormDetail() {
+            readWarehousing({ id: this.id }).then(response => {
+                let dataForm = response.data.data;
+                dataForm.inventoryOutInfos = dataForm.inventoryOutInfos == null ? [] : dataForm.inventoryOutInfos
+                dataForm.inventoryOutInfos = dataForm.inventoryOutInfos == null ? [] : dataForm.inventoryOutInfos
+                this.dataForm = dataForm;
+            }).catch(() => {})
+        },
+         // 选择商品
+        async handleSelectGoods() {
+            if (!this.dataForm.warehouseId) {
+                this.$message.error('请先选择仓库!')
+                return
+            }else{
+                console.log(this.dataForm.inventoryOutInfos)
+                let selectedIds = this.dataForm.inventoryOutInfos.map(item => item.id);
+                const Goods = await this.$EnPickerGoods({
+                    // goodsApi: '/warehouse-entry/info/inventory',
+                    selectedIds: selectedIds,
+                    goodsApiParams: { warehouseId: this.dataForm.warehouseId }
+                })
+                if (!Goods.length) return
+                const inventoryOutInfos = Goods.map(item => {
+                    item.updateNumber = 1
+                    item.sumPrice = item.createPrice * 1
+                    return item
+                })
+                this.dataForm.inventoryOutInfos = this.dataForm.inventoryOutInfos && this.dataForm.inventoryOutInfos.length ? this.dataForm.inventoryOutInfos.concat(inventoryOutInfos) : this.dataForm.inventoryOutInfos = inventoryOutInfos
+            }
+            
+        },
+        submitForm(){
+            this.$refs["dataForm"].validate((valid) => {
+                if (valid) {
+                    if(this.dataForm.inventoryOutInfos.length == 0){
+                        this.$message.error('请选择商品/物料!')
+                        return
+                    }else{
+                        if(this.id){
+                            updateWarehousing(this.dataForm).then(() => {
+                                this.$notify({
+                                    title: '成功',
+                                    message: '更新成功',
+                                    type: 'success',
+                                    duration: 2000
+                                })
+                                this.roBack();
+                            })
+                        }else{
+                            createWarehousing(this.dataForm).then(() => {
+                                this.$notify({
+                                    title: "成功",
+                                    message: "创建成功",
+                                    type: "success",
+                                    duration: 2000,
+                                });
+                                this.roBack();
+                            })
+                        }
+                    }   
+                }
+            });
+        },
+        handleChange(row) {
+            if (row.createPrice && row.updateNumber) {
+                row.sumPrice = row.createPrice * row.updateNumber
+            }
+        },
+        roBack() {
+            // const { callback } = this.$route.params
+            // if (typeof callback === 'function') callback()
+            this.$store.dispatch('delVisitedViews', this.$route).then((views) => {
+                const latestView = views.slice(-1)[0]
+                if (latestView) {
+                    this.$router.push(latestView.path)
+                } else {
+                    this.$router.push('/')
+                }
+            })
+            // this.$router.push({ name: 'warehousing' })
+        },
+    }
+}
+</script>
+<style>
+/** 底部步骤 */
+.footer {
+  width: 100%;
+  padding: 10px;
+  bottom: 0px;
+  text-align: center;
+  z-index: 999;
+}
+.mx {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+/** 表格中输入框样式 */
+.tableFormItem {
+  width: 100%;
+  margin-bottom: 0;
+}
+</style>

+ 1 - 1
src/views/stock/warehousing/warehousing.vue

@@ -12,7 +12,7 @@
         <el-option :key="item.id" v-for="item in warehouseList" :label="item.warehouseName" :value="item.id">
         </el-option>
       </el-select>
-      <el-select v-model="listQuery.isRunFinish" clearable placeholder="请选择入库状态" class="filter-item" style="width: 200px">
+      <el-select v-model="listQuery.isRunFinish" clearable placeholder="请选择状态" class="filter-item" style="width: 200px">
         <el-option :key="item.type" v-for="item in typeList" :label="item.name" :value="item.type">
         </el-option>
       </el-select>