瀏覽代碼

盘点管理

chris 3 年之前
父節點
當前提交
ca1d73a543

+ 34 - 0
src/api/warehouse.js

@@ -23,6 +23,24 @@ export function workflowInfot (modelId) {
   })
 }
 
+// 获取仓库List
+export function getWarehouseList (params) {
+  return request({
+    url: request.adornUrl(`/biz-service/stock-mg-ctl/listWarehouses`),
+    method: 'get',
+    params
+  })
+}
+
+// 获取货架List
+export function getShelveList (params) {
+  return request({
+    url: request.adornUrl(`/biz-service/stock-mg-ctl/listShelves`),
+    method: 'get',
+    params
+  })
+}
+
 // 获取物料List
 export function getMaterialList (params) {
   return request({
@@ -161,3 +179,19 @@ export function templateOut (data) {
     data
   })
 }
+// 盘点查询
+export function getInventoryList (params) {
+  return request({
+    url: request.adornUrl(`/biz-service/inventory-checking-ctl/list`),
+    method: 'get',
+    params
+  })
+}
+// 盘点详情
+export function getInventoryDetail (params) {
+  return request({
+    url: request.adornUrl(`/biz-service/inventory-checking-ctl/listInventory`),
+    method: 'get',
+    params
+  })
+}

+ 23 - 120
src/views/modules/warehouse/inventory-add.vue

@@ -1,99 +1,32 @@
 <template>
   <el-dialog
-    title="查看模板出库"
+    title="新增盘点"
     width="70%"
     :close-on-click-modal="false"
     :visible.sync="visible">
     <el-form :model="dataForm" :rules="dataRule" ref="dataForm" label-width="auto">
       <el-row class="my-row">
-        <el-col :span="12">
-          <el-form-item label="盘点">
-            <el-input v-model="dataForm.code"  placeholder="盘点员"></el-input>
+        <el-col :span="8">
+          <el-form-item label="盘点编码" prop="inventoryCode">
+            <el-input v-model="dataForm.inventoryCode" :disabled="true" placeholder="系统自动生成"></el-input>
           </el-form-item>
         </el-col>
-        <el-col :span="12" style="padding-left: 20px">
-          <el-form-item label="复核员">
-            <el-input v-model="dataForm.code"  placeholder="复核员"></el-input>
+        <el-col :span="8" style="padding-left: 20px">
+          <el-form-item label="盘点员" prop="checkerId">
+            <user-component v-model="dataForm.checkerId" :user-id="dataForm.checkerId"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8" style="padding-left: 20px">
+          <el-form-item label="复核员" prop="dcheckerId">
+            <user-component v-model="dataForm.dcheckerId" :user-id="dataForm.dcheckerId"/>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row class="my-row">
         <el-form-item label="备注说明">
-            <el-input v-model="dataForm.code"  placeholder="备注说明"></el-input>
+            <el-input v-model="dataForm.notes"  placeholder="备注说明"></el-input>
           </el-form-item>
       </el-row>
-      <el-row>
-        <el-table
-          :data="dataList"
-          border
-          style="width: 100%;">
-          <el-table-column
-            label="序号"
-            type="index"
-            width="50"
-            align="center">
-          </el-table-column>
-          <el-table-column
-            prop="-"
-            header-align="center"
-            align="center"
-            label="仓库名称">
-          </el-table-column>
-          <el-table-column
-            prop="-"
-            header-align="center"
-            align="center"
-            label="物品名称">
-          </el-table-column>
-          <el-table-column
-            prop="recordType"
-            header-align="center"
-            align="center"
-            label="规格">
-          </el-table-column>
-          <el-table-column
-            prop="state"
-            header-align="center"
-            align="center"
-            label="数量">
-          </el-table-column>
-          <el-table-column
-            prop="approver"
-            header-align="center"
-            align="center"
-            label="单位">
-          </el-table-column>
-          <el-table-column
-            prop="-"
-            header-align="center"
-            align="center"
-            label="仓库库存数量">
-          </el-table-column>
-          <el-table-column
-            prop="-"
-            header-align="center"
-            align="center"
-            label="请选择数量">
-          </el-table-column>
-          <el-table-column
-            prop="-"
-            header-align="center"
-            align="center"
-            label="盘库状态">
-          </el-table-column>
-          <el-table-column
-            fixed="right"
-            header-align="center"
-            align="center"
-            width="150"
-            label="操作">
-            <template slot-scope="scope">
-            <el-button v-if="isAuth('wh:inbound-record-ctl:info')" type="text" size="small" @click="details(scope.row.id)">完成</el-button>
-            <el-button type="text" size="small" @click="exportItem(scope.row.id)">开始盘点</el-button>
-          </template>
-          </el-table-column>
-        </el-table>
-      </el-row>
     </el-form>
     <span slot="footer" class="dialog-footer">
       <el-button @click="visible = false">取消</el-button>
@@ -105,54 +38,37 @@
 <script>
   import UserComponent from '../common/user-component'
   import DictSelect from '../sys/dict-select'
-  import {getUUID} from '../../../utils'
   export default {
-    name: 'stock-order-inbound',
+    name: 'inventory-add',
     components: {DictSelect, UserComponent},
     data () {
       return {
         visible: false,
-        dictType: 'material_type',
-        dataList: [],
-        dataForm: {
-          id: '',
-          amount: 0,
-          applicant: ''
-        },
+        dataForm: { },
         dataRule: {
+          checkerId: [{ required: true, message: '盘点员不能为空', trigger: 'change' }],
+          dcheckerId: [{ required: true, message: '复核员不能为空', trigger: 'change' }]
         }
       }
     },
     methods: {
       init () {
         this.visible = true
-        this.dataForm.code = getUUID()
+        this.dataForm = {}
       },
       // 表单提交
       dataFormSubmit () {
         this.$refs['dataForm'].validate((valid) => {
           if (valid) {
             this.$http({
-              url: this.$http.adornUrl(`/biz-service/in-out-bound-ctl/inbound`),
+              url: this.$http.adornUrl(`/biz-service/inventory-checking-ctl/save`),
               method: 'post',
               data: this.$http.adornData({
-                'amount': this.dataForm.amount,
-                'applicant': this.dataForm.applicant,
-                'approver': this.dataForm.approver,
-                'batchNumber': this.dataForm.batchNumber,
-                'cnt': this.dataForm.cnt,
-                'materialId': this.dataForm.materialId,
-                'materialName': this.dataForm.materialName,
+                'checkerId': this.dataForm.checkerId,
+                'dcheckerId': this.dataForm.dcheckerId,
                 'notes': this.dataForm.notes,
-                'price': this.dataForm.price,
-                'orgId': this.dataForm.orgId,
-                'recordType': this.dataForm.recordType,
-                'source': this.dataForm.source,
-                'state': this.dataForm.state,
-                'templateItemPlanId': this.dataForm.templateItemPlanId,
-                'usage': this.dataForm.usage,
-                'userId': this.dataForm.userId,
-                'creatorId': this.$store.state.user.id
+                'creatorId': this.$store.state.user.id,
+                'orgId': this.$store.state.user.orgId
               })
             }).then(({data}) => {
               if (data && data.code === '200') {
@@ -174,19 +90,6 @@
       },
       validateField (type) {
         this.$refs.dataForm.validateField(type)
-      },
-      userChanged (userId) {
-        this.$http({
-          url: this.$http.adornUrl('/user-service/user/info/' + userId),
-          method: 'get'
-        }).then(({data}) => {
-          if (data && data.code === '200') {
-            this.dataForm.orgId = data.data.orgId
-            this.dataForm.orgName = data.data.orgName
-          } else {
-            this.$message.error(data.msg)
-          }
-        })
       }
     }
   }

+ 308 - 0
src/views/modules/warehouse/inventory-detail.vue

@@ -0,0 +1,308 @@
+<template>
+  <el-dialog
+    :title="!id ? '新增': display ? '查看' : '开始盘点'"
+    width="70%"
+    :close-on-click-modal="false"
+    :visible.sync="visible">
+    <el-form :model="dataForm" :rules="dataRule" ref="dataForm" label-width="auto">
+      <el-row class="my-row">
+        <el-col :span="8">
+          <el-form-item label="盘点编码" prop="inventoryCode">
+            <el-input v-model="dataForm.inventoryCode" :disabled="true"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8" style="padding-left: 20px">
+          <el-form-item label="盘点员" prop="checkerName">
+            <el-input v-model="dataForm.checkerName" :disabled="true"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8" style="padding-left: 20px">
+          <el-form-item label="复核员" prop="dcheckerName">
+            <el-input v-model="dataForm.dcheckerName" :disabled="true"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row class="my-row">
+        <el-form-item label="备注说明">
+            <el-input v-model="dataForm.notes" :disabled="true"></el-input>
+          </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form :inline="true" :model="dataForm1" @keyup.enter.native="queryData()">
+          <el-form-item label="仓库名称" prop="warehouseId">
+            <el-select
+              v-model="dataForm1.warehouseId"
+              filterable
+              remote
+              :remote-method="remoteWarehouse"
+              placeholder="请选择">
+              <el-option
+                v-for="item in optionsWh"
+                :key="item.code"
+                :label="item.value"
+                :value="item.code">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="货架名称" prop="shelveId">
+            <el-select
+              v-model="dataForm1.shelveId"
+              filterable
+              remote
+              :remote-method="remoteShelve"
+              placeholder="请选择">
+              <el-option
+                v-for="item in optionsShelve"
+                :key="item.code"
+                :label="item.value"
+                :value="item.code">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button @click="queryData()">查询</el-button>
+          </el-form-item>
+        </el-form>
+      </el-row>
+      <el-table
+        :data="dataList"
+        border
+        v-loading="dataListLoading"
+        @selection-change="selectionChangeHandle"
+        style="width: 100%;">
+        <el-table-column
+          label="序号"
+          type="index"
+          width="50"
+          align="center">
+        </el-table-column>
+        <el-table-column
+          prop="warehouseName"
+          header-align="center"
+          align="center"
+          label="仓库名称">
+        </el-table-column>
+        <el-table-column
+          prop="materialName"
+          header-align="center"
+          align="center"
+          label="物品名称">
+        </el-table-column>
+        <el-table-column
+          prop="specifications"
+          header-align="center"
+          align="center"
+          label="规格">
+        </el-table-column>
+        <el-table-column
+          prop="unitName"
+          header-align="center"
+          align="center"
+          label="单位">
+        </el-table-column>
+        <el-table-column
+          prop="cnt"
+          header-align="center"
+          align="center"
+          label="仓库库存数量">
+        </el-table-column>
+        <el-table-column
+          prop="inventoryCnt"
+          header-align="center"
+          align="center"
+          label="请选择数量">
+        </el-table-column>
+        <el-table-column
+          prop="inventoryState"
+          header-align="center"
+          align="center"
+          label="盘库状态">
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        @size-change="sizeChangeHandle"
+        @current-change="currentChangeHandle"
+        :current-page="pageIndex"
+        :page-sizes="[10, 20, 50, 100]"
+        :page-size="pageSize"
+        :total="totalPage"
+        layout="total, sizes, prev, pager, next, jumper">
+      </el-pagination>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="visible = false">取消</el-button>
+      <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+  import {getInventoryDetail, getWarehouseList, getShelveList} from '@/api/warehouse'
+  export default {
+    name: 'inventory-detail',
+    data () {
+      return {
+        visible: false,
+        display: false,
+        dataList: [],
+        optionsWh: [],
+        optionsShelve: [],
+        id: 0,
+        pageIndex: 1,
+        pageSize: 10,
+        totalPage: 0,
+        dataListLoading: false,
+        dataListSelections: [],
+        dataForm: {},
+        dataForm1: {},
+        dataRule: {
+        }
+      }
+    },
+    methods: {
+      async init (id, display) {
+        this.visible = true
+        this.id = id || 0
+        this.display = display
+        this.dataForm = {}
+        this.dataForm1 = {}
+        // 获取详情
+        this.queryData()
+      },
+      // 查询
+      queryData () {
+        this.pageIndex = 1
+        this.getDataList()
+      },
+      // 获取数据列表
+      getDataList () {
+        this.dataListLoading = true
+        let params = {
+          'current': this.pageIndex,
+          'size': this.pageSize,
+          'inventoryId': this.id,
+          'warehouseId': this.dataForm1.warehouseId ? this.dataForm1.warehouseId : null,
+          'shelveId': this.dataForm1.shelveId ? this.dataForm1.shelveId : null
+        }
+        getInventoryDetail(params).then(({data}) => {
+          if (data && data.code === '200') {
+            this.dataList = data.data.records
+            this.totalPage = Number(data.data.total)
+            if (this.dataList.length > 0) {
+              let item = this.dataList[0]
+              this.dataForm.inventoryCode = item.inventoryCode
+              this.dataForm.checkerName = item.checkerName
+              this.dataForm.dcheckerName = item.dcheckerName
+              this.dataForm.notes = item.notes
+            }
+          } else {
+            this.dataList = []
+            this.totalPage = 0
+          }
+          this.dataListLoading = false
+        })
+      },
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageIndex = 1
+        this.getDataList()
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageIndex = val
+        this.getDataList()
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+      },
+      // 表单提交
+      dataFormSubmit () {
+        this.$refs['dataForm'].validate((valid) => {
+          if (valid) {
+            this.$http({
+              url: this.$http.adornUrl(`/biz-service/in-out-bound-ctl/inbound`),
+              method: 'post',
+              data: this.$http.adornData({
+                'amount': this.dataForm.amount,
+                'applicant': this.dataForm.applicant,
+                'approver': this.dataForm.approver,
+                'batchNumber': this.dataForm.batchNumber,
+                'cnt': this.dataForm.cnt,
+                'materialId': this.dataForm.materialId,
+                'materialName': this.dataForm.materialName,
+                'notes': this.dataForm.notes,
+                'price': this.dataForm.price,
+                'orgId': this.dataForm.orgId,
+                'recordType': this.dataForm.recordType,
+                'source': this.dataForm.source,
+                'state': this.dataForm.state,
+                'templateItemPlanId': this.dataForm.templateItemPlanId,
+                'usage': this.dataForm.usage,
+                'userId': this.dataForm.userId,
+                'creatorId': this.$store.state.user.id
+              })
+            }).then(({data}) => {
+              if (data && data.code === '200') {
+                this.$message({
+                  message: '操作成功',
+                  type: 'success',
+                  duration: 1500,
+                  onClose: () => {
+                    this.visible = false
+                    this.$emit('refreshDataList')
+                  }
+                })
+              } else {
+                this.$message.error(data.msg)
+              }
+            })
+          }
+        })
+      },
+      validateField (type) {
+        this.$refs.dataForm.validateField(type)
+      },
+      // 仓库列表
+      async remoteWarehouse (query) {
+        let warehouseName = query || null
+        await getWarehouseList({'warehouseName': warehouseName}).then(({data}) => {
+          if (data && data.code === '200') {
+            this.dataForm1 = {}
+            this.optionsWh = []
+            data.data.records.forEach((item) => {
+              this.optionsWh.push({
+                code: item.warehouseId,
+                value: item.warehouseName
+              })
+            })
+          }
+        })
+      },
+      // 货架列表
+      async remoteShelve (query) {
+        let name = query || null
+        let warehouseId = this.dataForm1.warehouseId || null
+        await getShelveList({'name': name, 'warehouseId': warehouseId}).then(({data}) => {
+          if (data && data.code === '200') {
+            this.optionsShelve = []
+            data.data.records.forEach((item) => {
+              this.optionsShelve.push({
+                code: item.shelveId,
+                value: item.name
+              })
+            })
+          }
+        })
+      }
+    }
+  }
+</script>
+
+<style scoped>
+.my-line{
+  border-bottom: 1px solid #c0c4cc;
+  margin-bottom: 10px;
+}
+</style>

+ 69 - 51
src/views/modules/warehouse/inventory.vue

@@ -1,10 +1,11 @@
+<!-- 盘点 -->
 <template>
   <div class="stock-order">
-    <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
+    <el-form :inline="true" :model="dataForm" @keyup.enter.native="queryData()">
       <el-form-item label="盘点日期">
         <el-date-picker
           v-model="dataForm.date"
-          value-format="yyyy-MM-dd"
+          value-format="yyyy-MM-dd HH:mm:ss"
           type="daterange"
           range-separator="至"
           start-placeholder="开始日期"
@@ -12,8 +13,8 @@
         </el-date-picker>
       </el-form-item>
       <el-form-item>
-        <el-button @click="getDataList()">查询</el-button>
-        <el-button @click="inBound()"  type="primary">开始盘点</el-button>
+        <el-button @click="queryData()">查询</el-button>
+        <el-button @click="inventoryAdd()"  type="primary">新增盘点</el-button>
       </el-form-item>
     </el-form>
     <el-table
@@ -29,43 +30,46 @@
         align="center">
       </el-table-column>
       <el-table-column
-        prop="-"
+        prop="inventoryCode"
         header-align="center"
         align="center"
         label="编码">
       </el-table-column>
       <el-table-column
-        prop="recordType"
+        prop="createTime"
         header-align="center"
         align="center"
+        min-width="140"
         label="开始日期">
       </el-table-column>
       <el-table-column
-        prop="state"
+        prop="-"
         header-align="center"
         align="center"
+        min-width="140"
         label="结束日期">
       </el-table-column>
       <el-table-column
-        prop="approver"
+        prop="state"
         header-align="center"
         align="center"
+        :formatter="formatState"
         label="状态">
       </el-table-column>
       <el-table-column
-        prop="-"
+        prop="checkerName"
         header-align="center"
         align="center"
         label="盘点员">
       </el-table-column>
       <el-table-column
-        prop="-"
+        prop="dcheckerName"
         header-align="center"
         align="center"
         label="复核员">
       </el-table-column>
       <el-table-column
-        prop="-"
+        prop="notes"
         header-align="center"
         align="center"
         label="备注">
@@ -77,8 +81,8 @@
         width="150"
         label="操作">
         <template slot-scope="scope">
-          <el-button v-if="isAuth('wh:inbound-record-ctl:info')" type="text" size="small" @click="details(scope.row.id)">查看</el-button>
-          <el-button type="text" size="small" @click="exportItem(scope.row.id)">继续</el-button>
+          <el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.inventoryId, true)">查看</el-button>
+          <el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.inventoryId, false)">开始盘点</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -92,60 +96,61 @@
       layout="total, sizes, prev, pager, next, jumper">
     </el-pagination>
     <!--    入库-->
-    <inventory-add v-if="inboundVisible" ref="inbound" @refreshDataList="getDataList"></inventory-add>
+    <inventory-add v-if="inventoryAddVisible" ref="inventoryAdd" @refreshDataList="getDataList"></inventory-add>
+    <inventory-detail v-if="inventoryDetailVisible" ref="inventoryDetail" @refreshDataList="getDataList"></inventory-detail>
   </div>
 </template>
 
 <script>
   import inventoryAdd from './inventory-add'
+  import inventoryDetail from './inventory-detail'
+  import {getInventoryList} from '@/api/warehouse'
   export default {
     name: 'stock-order',
-    components: {inventoryAdd},
+    components: {inventoryAdd, inventoryDetail},
     data () {
       return {
-        inboundVisible: false,
-        dataForm: {
-          name: '',
-          date: ''
-        },
-        recordTypeOptions: [
-          {
-            value: null,
-            label: '请选择'
-          },
-          {
-            value: '0',
-            label: '入库'
-          },
-          {
-            value: '1',
-            label: '出库'
-          }
-        ],
+        inventoryAddVisible: false,
+        inventoryDetailVisible: false,
+        dataForm: {},
         dataList: [],
         pageIndex: 1,
         pageSize: 10,
         totalPage: 0,
         dataListLoading: false,
-        dataListSelections: []
+        dataListSelections: [],
+        // 状态
+        optionsState: [
+          {
+            code: '0',
+            value: '正在进行中'
+          },
+          {
+            code: '1',
+            value: '完成'
+          }
+        ]
       }
     },
+    created () {
+      this.getDataList()
+    },
     methods: {
+      // 查询
+      queryData () {
+        this.pageIndex = 1
+        this.getDataList()
+      },
       // 获取数据列表
       getDataList () {
         this.dataListLoading = true
-        this.$http({
-          url: this.$http.adornUrl('/biz-service/inbound-record-ctl/list'),
-          method: 'get',
-          params: this.$http.adornParams({
-            'current': this.pageIndex,
-            'size': this.pageSize,
-            'userId': this.dataForm.userId,
-            'beginTime': this.dataForm.date[0],
-            'endTime': this.dataForm.date[1],
-            'recordType': this.dataForm.recordType
-          })
-        }).then(({data}) => {
+        let params = {
+          'current': this.pageIndex,
+          'size': this.pageSize,
+          'beginTime': this.dataForm.date ? this.dataForm.date[0] : null,
+          'endTime': this.dataForm.date ? this.dataForm.date[1] : null
+        }
+        getInventoryList(params).then(({data}) => {
           if (data && data.code === '200') {
             this.dataList = data.data.records
             this.totalPage = Number(data.data.total)
@@ -171,12 +176,25 @@
       selectionChangeHandle (val) {
         this.dataListSelections = val
       },
-      // 入库申请
-      inBound () {
-        this.inboundVisible = true
+      // 盘点详情
+      addOrUpdateHandle (id, display) {
+        this.inventoryDetailVisible = true
+        this.$nextTick(() => {
+          this.$refs.inventoryDetail.init(id, display)
+        })
+      },
+      // 新增盘点
+      inventoryAdd () {
+        this.inventoryAddVisible = true
         this.$nextTick(() => {
-          this.$refs.inbound.init()
+          this.$refs.inventoryAdd.init()
         })
+      },
+      // 转换属性“状态”
+      formatState (row) {
+        if (!row.state) return ''
+        const item1 = this.optionsState.find((item) => item.code === row.state.toString())
+        return item1 ? item1.value : ''
       }
     }
   }

+ 1 - 1
src/views/modules/warehouse/template-delivery.vue

@@ -109,7 +109,7 @@
         totalPage: 0,
         dataListLoading: false,
         dataListSelections: [],
-        // 审批状态:0 待提交 1 待审批 2 审批中 3 审批完成 4 审批不通过
+        // 状态
         optionsState: [
           {
             code: '0',