hfxc226 преди 3 години
родител
ревизия
d6a4454273

+ 14 - 0
src/api/sqarepartmanage/sparepartinfo.js

@@ -65,6 +65,20 @@ export function updateSparePartInfo (parameter) {
   })
 }
 
+/**
+ * update func
+ * parameter: { }
+ * @param parameter
+ * @returns {*}
+ */
+export function updateSparePartInfoWarnStatus (parameter) {
+  return axios({
+    url: '/sqarepartmanage/spare-part-info/status/' + parameter.id + '/' + parameter.type + '/' + parameter.warnStatus,
+    method: 'PUT',
+    data: parameter
+  })
+}
+
 /**
  * fetch single func
  * parameter: { }

+ 5 - 5
src/router/generator-platform-routers.js

@@ -103,8 +103,12 @@ const constantRouterComponents = {
   'SpareType': () => import('@/views/sqarepartmanage/sparetype/SpareType'),
   // 备件基础信息
   'SparePartInfo': () => import('@/views/sqarepartmanage/sparepartinfo/SparePartInfo'),
-  'SparePartInfoCheckWarn': () => import('@/views/sqarepartmanage/sparepartinfo/SparePartInfoCheckWarn'),
+  'SparePartInfoCheckWarn': () => import('@/views/sqarepartmanage/sparepartinfo/SpareStoreTotalCheckStock'),
   'SparePartInfoPrint': () => import('@/views/sqarepartmanage/sparepartinfo/SparePartInfoPrint'),
+  // 备件库存汇总
+  'SpareStoreTotal': () => import('@/views/sqarepartmanage/sparepartinfo/SpareStoreTotal'),
+  // 备件库存汇总预警
+  'SpareStoreTotalMinStock': () => import('@/views/sqarepartmanage/sparepartinfo/SpareStoreTotalMinStock'),
   // 备件使用信息
   'SparePartUsed': () => import('@/views/sqarepartmanage/sparepartused/SparePartUsed'),
   // 点检
@@ -138,10 +142,6 @@ const constantRouterComponents = {
   'Store': () => import('@/views/store/store/Store'),
   // 备件库存
   'SpareStore': () => import('@/views/store/sparestore/SpareStore'),
-  // 备件库存汇总
-  'SpareStoreTotal': () => import('@/views/store/sparestore/SpareStoreTotal'),
-  // 备件库存汇总预警
-  'SpareStoreTotalMinStock': () => import('@/views/store/sparestore/SpareStoreTotal'),
   // 备件二级库存
   'SpareStoreSecond': () => import('@/views/store/sparestoresecond/SpareStoreSecond'),
   // 入库登记单

+ 10 - 0
src/utils/dict.js

@@ -81,6 +81,7 @@ DictCache.TYPE = {
   SB_COLOR: 'SB_COLOR', // 设备颜色
   SB_MEASURE_RESULT: 'SB_MEASURE_RESULT', // 检定结论
   SB_INFO_STATUS: 'SB_INFO_STATUS', // 设备状态
+  SPARE_WARN_STATUS: 'SPARE_WARN_STATUS', // 备件库存不足预警状态
   SB_MEASURE_STATUS: 'SB_MEASURE_STATUS', // 检定设备状态
   SBTYPE_SOURCETYPE: 'SBTYPE_SOURCETYPE', // 设备来源方式
   SBINFO_UNIT: 'SBINFO_UNIT', // 计量单位
@@ -1204,6 +1205,15 @@ DictCache.COLOR = {
     1: 'success', // 正在使用
     2: 'error' // 已过期
   },
+  /**
+   * 设备状态
+   */
+  SPARE_WARN_STATUS: {
+    1: 'error', // 在库
+    2: 'warning', // 使用中
+    3: 'gray', // 报废中
+    0: 'success' // 已报废
+  },
   /**
    * 设备状态
    */

+ 6 - 0
src/views/sqarepartmanage/sparepartinfo/SparePartInfo.vue

@@ -206,6 +206,12 @@ export default {
             return record.typeName
           }
         },
+        {
+          title: '备件编码',
+          dataIndex: 'no',
+          checked: true,
+          width: '150px'
+        },
         {
           title: '备件名称',
           dataIndex: 'name',

+ 25 - 25
src/views/sqarepartmanage/sparepartinfo/SparePartInfoSbModel.vue

@@ -1,17 +1,17 @@
 <template>
   <a-card :bordered="false">
-     <a-row :gutter="8">
-       <a-col :span="4">
-         <a-tree
-           @expand="onExpand"
-           :expandedKeys="expandedKeys"
-           :autoExpandParent="true"
-           @select="onSelect"
-           :selectedKeys="selectedKeys"
-           :treeData="spareTypeTreeData"
-         />
-       </a-col>
-       <a-col :span="20">
+    <a-row :gutter="8">
+      <a-col :span="4">
+        <a-tree
+          @expand="onExpand"
+          :expandedKeys="expandedKeys"
+          :autoExpandParent="true"
+          @select="onSelect"
+          :selectedKeys="selectedKeys"
+          :treeData="spareTypeTreeData"
+        />
+      </a-col>
+      <a-col :span="20">
         <div class="table-page-search-wrapper">
           <a-form layout="inline">
             <a-row :gutter="48">
@@ -22,7 +22,7 @@
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-item label="等级">
-                  <a-select v-model="queryParam.level"  placeholder="请选择">
+                  <a-select v-model="queryParam.level" placeholder="请选择">
                     <a-select-option
                       v-for="(label,value) in levelMap"
                       :key="value"
@@ -80,7 +80,7 @@
           showPagination="auto"
         >
           <span slot="status" slot-scope="text, record">
-            <a @click="handleStore(record)">{{text||"无"}}</a>
+            <a @click="handleStore(record)">{{ text||"无" }}</a>
           </span>
           <span slot="action" slot-scope="record">
             <template>
@@ -116,7 +116,7 @@ import InStoreList from './modules/InStoreList'
 import OutStoreList from './modules/OutStoreList'
 import SparePartUsedSelectModal from '@/views/sqarepartmanage/sparepartused/modules/SparePartUsedSelectModal'
 import { fetchSpareTypeAndSbModelTree } from '@/api/sqarepartmanage/sparetype'
-import { addSbModelBomBatch, selectSpareInfoListByModelId, deleteSbModelBoms} from '@/api/sb/modelbom'
+import { addSbModelBomBatch, selectSpareInfoListByModelId, deleteSbModelBoms } from '@/api/sb/modelbom'
 
 export default {
   name: 'SparePartInfoList',
@@ -160,10 +160,10 @@ export default {
           title: '原厂编号',
           dataIndex: 'initNo'
         },
-       // {
-         // title: '规格型号',
-         // dataIndex: 'ggxh'
-        //},
+        // {
+        // title: '规格型号',
+        // dataIndex: 'ggxh'
+        // },
         {
           title: '等级',
           dataIndex: 'level',
@@ -178,11 +178,11 @@ export default {
             return this.BaseTool.Amount.formatter(text)
           }
         },
-       // {
-         // title: '当前库存',
-         // dataIndex: 'currentStock',
-          //scopedSlots: { customRender: 'status' }
-       // },
+        // {
+        // title: '当前库存',
+        // dataIndex: 'currentStock',
+        // scopedSlots: { customRender: 'status' }
+        // },
         {
           title: '最高库存',
           dataIndex: 'maxStock'
@@ -357,7 +357,7 @@ export default {
       })
     },
     handleSparePartUsed (record) {
-      this.$refs.sparePartUsedSelectModal.base({}, { spareId:record.id })
+      this.$refs.sparePartUsedSelectModal.base({}, { spareId: record.id })
     },
     handleOutStore (record) {
       fetchOutStoreList({ id: record.id }).then(res => {

+ 295 - 0
src/views/sqarepartmanage/sparepartinfo/SpareStoreTotal.vue

@@ -0,0 +1,295 @@
+<template>
+  <a-card :bordered="false">
+    <div class="table-page-search-wrapper" @keyup.enter="handleEnter">
+      <a-form layout="inline">
+        <a-row :gutter="48">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="关键字">
+              <a-input v-model="queryParam.keyword" placeholder="请输入备件名称/备件编码"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="备件类别">
+              <a-tree-select
+                style="width: 100%"
+                :dropdownStyle="{ maxHeight: '400px', overflow: 'auto' }"
+                :treeData="spareTypeTreeData"
+                :treeNodeFilterProp="'title'"
+                :showSearch="true"
+                v-model="queryParam.typeId"
+                placeholder="请选择"
+              >
+              </a-tree-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6 || 24" :sm="24">
+            <span class="table-page-search-submitButtons">
+              <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
+              <a-button style="margin-left: 8px" @click="resetSearchForm">重置</a-button>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <div class="table-operator">
+      <!--<a-button v-if="$auth('store-spare-stores-add')" type="primary" icon="plus" @click="$refs.baseModal.base()">新增</a-button>-->
+      <a-button style="margin-left: 8px" v-if="$auth('store-spare-stores-export')" type="primary" icon="download" @click="doExport">导出</a-button>
+    </div>
+
+    <s-table
+      ref="table"
+      size="default"
+      rowKey="spareId"
+      :columns="columns"
+      :data="loadData"
+      :alert="options.alert"
+      :rowSelection="options.rowSelection"
+      showPagination="auto"
+    >
+      <span slot="action" slot-scope="record">
+        <template>
+          <a v-if="record.warnStatus != 1" @click="handleUpdateStatus(record, 1)">待处理</a>
+          <a-divider type="vertical" />
+          <a v-if="record.warnStatus != 2" @click="handleUpdateStatus(record, 2)">询价中</a>
+          <a-divider type="vertical" />
+          <a v-if="record.warnStatus != 3"@click="handleUpdateStatus(record, 3)">采购中</a>
+          <a-divider type="vertical" />
+          <a v-if="record.warnStatus != 0" @click="handleUpdateStatus(record, 0)">正常</a>
+        </template>
+      </span>
+      <span slot="status" slot-scope="text">
+              <badge
+                :status="DictCache.COLOR.SPARE_WARN_STATUS[text]"
+                :text="warnStatusMap[text]" />
+            </span>
+    </s-table>
+    <base-form ref="baseModal" @ok="handleOk"/>
+    <detail ref="detailModal"/>
+  </a-card>
+</template>
+
+<script>
+import { STable, Ellipsis } from '@/components'
+import BaseForm from './modules/BaseForm'
+import Detail from './modules/Detail'
+import { fetchSpareTypeTree } from '@/api/sqarepartmanage/sparetype'
+import { getSparePartInfoPage, updateSparePartInfoWarnStatus, exportSparePartInfo } from '@/api/sqarepartmanage/sparepartinfo'
+import { queryDept, getDeptsAllByParentId } from '@/api/upms/dept'
+
+export default {
+  name: 'SpareStoreTotal',
+  components: {
+    STable,
+    Ellipsis,
+    BaseForm,
+    Detail
+  },
+  props: {
+    filter: {
+      type: Number,
+      default: -1
+    },
+    warnStatusList: {
+      type: Array,
+      default: null
+    },
+    forecastStatusList: {
+      type: Array,
+      default: null
+    }
+  },
+  data () {
+    return {
+      companyList: {},
+      projectList: {},
+      warnStatusMap: {},
+      spareTypeTreeData: [],
+      // 查询参数
+      queryParam: {
+        filter: this.filter,
+        warnStatusList: this.warnStatusList,
+        forecastStatusList: this.forecastStatusList
+      },
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          checked: true,
+          customRender: (text, record, index) => {
+            return `${(this.$refs.table.localPagination.current - 1) * this.$refs.table.localPagination.pageSize + index + 1}`
+          }
+        },
+        {
+          title: '编号',
+          checked: true,
+          dataIndex: 'no'
+        },
+        {
+          title: '备件名称',
+          checked: true,
+          dataIndex: 'name'
+        },
+        {
+          title: '规格型号',
+          checked: true,
+          dataIndex: 'ggxh'
+        },
+        {
+          title: '计量单位',
+          checked: true,
+          dataIndex: 'unit'
+        },
+        {
+          title: '单价',
+          checked: true,
+          dataIndex: 'price'
+        },
+        {
+          title: '最低库存',
+          checked: true,
+          dataIndex: 'minStock'
+        },
+        {
+          title: '最高库存',
+          checked: true,
+          dataIndex: 'maxStock'
+        },
+        {
+          title: '实际库存',
+          checked: true,
+          dataIndex: 'totalStock',
+          customRender: (text, record, index) => {
+            if (text == null) {
+              return 0
+            } else {
+              return text
+            }
+          }
+        },
+        {
+          title: '状态',
+          checked: true,
+          dataIndex: 'warnStatus',
+          scopedSlots: { customRender: 'status' }
+        },
+        {
+          title: '操作',
+          checked: true,
+          key: 'action',
+          width: '200px',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      // 下拉框map
+      delFlagMap: {},
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        parameter = {
+          ...parameter,
+          ...this.queryParam,
+          dataScope: {
+          }
+        }
+        return getSparePartInfoPage(Object.assign(parameter, this.queryParam))
+          .then(res => {
+            return res.data
+          })
+      },
+      selectedRowKeys: [],
+      selectedRows: [],
+
+      options: {
+        alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+        rowSelection: {
+          selectedRowKeys: this.selectedRowKeys,
+          onChange: this.onSelectChange
+        }
+      },
+      optionAlertShow: false
+    }
+  },
+  created () {
+    // 下拉框map
+    this.warnStatusMap = this.DictCache.getLabelByValueMapByType(this.DictCache.TYPE.SPARE_WARN_STATUS)
+    this.tableOption()
+    queryDept({ nature: this.DictCache.VALUE.SYS_DEPT_NATURE.FEN_GONG_SI }).then(res => {
+      this.companyList = res.data
+    })
+    fetchSpareTypeTree({}).then(res => {
+      this.spareTypeTreeData = res.data
+    })
+  },
+  methods: {
+    handleCompanyChange (value) {
+      getDeptsAllByParentId({ deptId: value, nature: this.DictCache.VALUE.SYS_DEPT_NATURE.XIANG_MU_BU }).then(res => {
+        this.projectList = res.data
+      })
+    },
+    tableOption () {
+      if (!this.optionAlertShow) {
+        this.options = {
+          alert: { show: true, clear: () => { this.selectedRowKeys = [] } },
+          rowSelection: {
+            selectedRowKeys: this.selectedRowKeys,
+            onChange: this.onSelectChange,
+            getCheckboxProps: record => ({
+              props: {
+                disabled: false,
+                name: record.id
+              }
+            })
+          }
+        }
+        this.optionAlertShow = true
+      } else {
+        this.options = {
+          alert: false,
+          rowSelection: null
+        }
+        this.optionAlertShow = false
+      }
+    },
+    handleUpdateStatus (record, warnStatus) {
+      const parameter = {}
+      parameter.id = record.id
+      parameter.warnStatus = warnStatus
+      parameter.type = 1
+      updateSparePartInfoWarnStatus(parameter)
+        .then(() => {
+          this.handleOk()
+        }).catch(() => {
+          this.confirmLoading = false
+        })
+    },
+    handleOk () {
+      this.$refs.table.refresh()
+    },
+    onSelectChange (selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    resetSearchForm () {
+      this.queryParam = {
+        filter: this.filter,
+        warnStatusList: this.warnStatusList,
+        forecastStatusList: this.forecastStatusList
+      }
+      this.$refs.table.refresh(true)
+    },
+    doExport () {
+      const parameter = {
+        ...this.queryParam
+      }
+      exportSparePartInfo(parameter).then(file => {
+        this.BaseTool.UPLOAD.downLoadExportExcel(file)
+      })
+    },
+    handleEnter () {
+      this.$refs.table.refresh(true)
+    }
+  }
+}
+</script>

+ 19 - 0
src/views/sqarepartmanage/sparepartinfo/SpareStoreTotalCheckStock.vue

@@ -0,0 +1,19 @@
+<template>
+  <SpareStoreTotal :forecast-status-list="[1,2,3]"/>
+</template>
+
+<script>
+import SpareStore from './SpareStoreTotal'
+import SpareStoreTotal from '@/views/sqarepartmanage/sparepartinfo/SpareStoreTotal'
+export default {
+  name: 'SpareStoreTotalMinStock',
+  components: {
+    SpareStoreTotal,
+    SpareStore
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 19 - 0
src/views/sqarepartmanage/sparepartinfo/SpareStoreTotalMinStock.vue

@@ -0,0 +1,19 @@
+<template>
+  <SpareStoreTotal :warn-status-list="[1,2,3]"/>
+</template>
+
+<script>
+import SpareStore from './SpareStoreTotal'
+import SpareStoreTotal from '@/views/sqarepartmanage/sparepartinfo/SpareStoreTotal'
+export default {
+  name: 'SpareStoreTotalMinStock',
+  components: {
+    SpareStoreTotal,
+    SpareStore
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 3 - 0
src/views/sqarepartmanage/sparepartinfo/modules/BaseForm.vue

@@ -617,6 +617,9 @@ export default {
           'yt',
           'zjm',
           'zbh',
+          'agePeriod',
+          'usePeriod',
+          'purchasePeriod',
           'maxStock',
           'minStock',
           'initStock',

+ 53 - 43
src/views/store/sparestore/SpareStoreTotal.vue

@@ -8,30 +8,6 @@
               <a-input v-model="queryParam.keyword" placeholder="请输入备件名称/备件编码"/>
             </a-form-item>
           </a-col>
-          <a-col :md="6" :sm="24">
-            <a-form-item label="所属公司">
-              <a-select @change="handleCompanyChange" v-model="queryParam.useCompany" placeholder="请选择">
-                <a-select-option
-                  v-for="({deptId, name}) in companyList"
-                  :key="deptId"
-                  :label="name"
-                  :value="deptId">{{ name }}
-                </a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
-          <a-col :md="6" :sm="24">
-            <a-form-item label="所属项目">
-              <a-select v-model="queryParam.useProject" placeholder="请选择">
-                <a-select-option
-                  v-for="({deptId, name}) in projectList"
-                  :key="deptId"
-                  :label="name"
-                  :value="deptId">{{ name }}
-                </a-select-option>
-              </a-select>
-            </a-form-item>
-          </a-col>
           <a-col :md="6" :sm="24">
             <a-form-item label="备件类别">
               <a-tree-select
@@ -71,13 +47,17 @@
       :rowSelection="options.rowSelection"
       showPagination="auto"
     >
-      <!--<span slot="action" slot-scope="record">
+      <span slot="action" slot-scope="record">
         <template>
-          <a @click="handleView(record)">仓库台账</a>
+          <a v-if="record.warnStatus != 1" @click="handleUpdateStatus(record, 1)">待处理</a>
+          <a-divider type="vertical" />
+          <a v-if="record.warnStatus != 2" @click="handleUpdateStatus(record, 2)">询价中</a>
+          <a-divider type="vertical" />
+          <a v-if="record.warnStatus != 3"@click="handleUpdateStatus(record, 3)">采购中</a>
           <a-divider type="vertical" />
-          <a v-if="$auth('store-spare-stores-edit')" @click="handleEdit(record)">出入库详情</a>
+          <a v-if="record.warnStatus != 0" @click="handleUpdateStatus(record, 0)">正常</a>
         </template>
-      </span>-->
+      </span>
       <span slot="delFlag" slot-scope="text">
         <badge
           :status="DictCache.COLOR.DELFLAG[text]"
@@ -94,8 +74,14 @@ import { STable, Ellipsis } from '@/components'
 import BaseForm from './modules/BaseForm'
 import Detail from './modules/Detail'
 import { fetchSpareTypeTree } from '@/api/sqarepartmanage/sparetype'
+import { updateSparePartInfoWarnStatus } from '@/api/sqarepartmanage/sparepartinfo'
 import { queryDept, getDeptsAllByParentId } from '@/api/upms/dept'
-import { getSpareStoreTotalPage, deleteSpareStores, fetchSpareStore, exportSpareStore } from '@/api/store/sparestore'
+import {
+  getSpareStoreTotalPage,
+  deleteSpareStores,
+  fetchSpareStore,
+  exportSpareStore
+} from '@/api/store/sparestore'
 
 export default {
   name: 'SpareStoreTotal',
@@ -135,54 +121,66 @@ export default {
         {
           title: '序号',
           dataIndex: 'index',
+          checked: true,
           customRender: (text, record, index) => {
             return `${(this.$refs.table.localPagination.current - 1) * this.$refs.table.localPagination.pageSize + index + 1}`
           }
         },
         {
           title: '编号',
+          checked: true,
           dataIndex: 'no'
         },
         {
           title: '备件名称',
+          checked: true,
           dataIndex: 'name'
         },
         {
           title: '规格型号',
+          checked: true,
           dataIndex: 'ggxh'
         },
         {
           title: '计量单位',
+          checked: true,
           dataIndex: 'unit'
         },
         {
           title: '单价',
+          checked: true,
           dataIndex: 'price'
         },
         {
           title: '最低库存',
+          checked: true,
           dataIndex: 'minStock'
         },
         {
           title: '最高库存',
+          checked: true,
           dataIndex: 'maxStock'
         },
         {
-          title: '总库存',
-          dataIndex: 'totalStock'
+          title: '实际库存',
+          checked: true,
+          dataIndex: 'totalStock',
+          customRender: (text, record, index) => {
+            if (text == null) {
+              return 0
+            } else {
+              return text
+            }
+          }
+        },
+        {
+          title: '操作',
+          checked: true,
+          key: 'action',
+          width: '200px',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
         }
-
-        // {
-        // title: '创建日期',
-        // dataIndex: 'createdTime'
-        // },
-        // {
-        // title: '操作',
-        // key: 'action',
-        // width: '200px',
-        // align: 'center',
-        // scopedSlots: { customRender: 'action' }
-        // }
       ],
       // 下拉框map
       delFlagMap: {},
@@ -283,6 +281,18 @@ export default {
         modal.base(res.data)
       })
     },
+    handleUpdateStatus (record, warnStatus) {
+      const parameter = {}
+      parameter.id = record.spareId
+      parameter.warnStatus = warnStatus
+      parameter.type = 1
+      updateSparePartInfoWarnStatus(parameter)
+        .then(() => {
+          this.handleOk()
+        }).catch(() => {
+          this.confirmLoading = false
+        })
+    },
     handleOk () {
       this.$refs.table.refresh()
     },

+ 1 - 1
src/views/store/sparestore/SpareStoreTotalMinStock.vue

@@ -16,4 +16,4 @@ export default {
 
 <style scoped>
 
-</style>
+</style>