Browse Source

2022-02-23 0:00

王克恕 3 years ago
parent
commit
f62bce9384

+ 143 - 0
imcs-ui/src/api/prepareProductMgr/material.js

@@ -0,0 +1,143 @@
+/******************** 【原材料管理】API ***********************/
+import axiosApi from '../AxiosApi.js'
+
+const apiList = {
+	getList: {
+    method: 'POST',
+    url: `/authority/meterial/all`
+  },
+  page: {
+    method: 'POST',
+    url: `/authority/meterial/page`
+  },
+  update: {
+    method: 'POST',
+    url: `/authority/meterial/update`
+  },
+  save: {
+    method: 'POST',
+    url: `/authority/meterial`
+  },
+  updateStatus: {
+    method: 'POST',
+    url: `/authority/meterial/status`
+  },
+  remove: {
+    method: 'DELETE',
+    url: `/authority/meterial`
+  },
+  delete: {
+    method: 'POST',
+    url: `/authority/meterial/delete`
+  },
+  list: {
+    method: 'POST',
+    url: `/authority/meterial/query`
+  },
+  // 工具原材料规格-批量查询
+  listSpecs: {
+    method: 'POST',
+    url: `/authority/meterialSpecs/getSpecsList`
+  },
+  preview: {
+    method: 'POST',
+    url: `/authority/meterial/preview`
+  },
+  export: {
+    method: 'POST',
+    url: `/authority/meterial/export`
+  },
+  import: {
+    method: 'POST',
+    url: `/authority/meterial/import`
+  }
+}
+
+export default {
+	getList (data) {
+    return axiosApi({
+      ...apiList.getList,
+      data
+    })
+  },
+  page (data) {
+    return axiosApi({
+      ...apiList.page,
+      data
+    })
+  },
+  save (data) {
+    return axiosApi({
+      ...apiList.save,
+      data
+    })
+  },
+  update (data) {
+    return axiosApi({
+      ...apiList.update,
+      data
+    })
+  },
+  updateStatus (data) {
+    return axiosApi({
+      ...apiList.updateStatus,
+      data
+    })
+  },
+  remove (data) {
+    return axiosApi({
+      ...apiList.remove,
+      data
+    })
+  },
+  delete (data) {
+    return axiosApi({
+      ...apiList.remove,
+      data
+    })
+  },
+  list (data) {
+    return axiosApi({
+      ...apiList.list,
+      data
+    })
+  },
+  listSpecs (data) {
+    return axiosApi({
+      ...apiList.listSpecs,
+      data
+    })
+  },
+  check (code) {
+    return axiosApi({
+      method: 'GET',
+      url: `/authority/meterial/check/${code}`
+    })
+  },
+  checkField (data) {
+    return axiosApi({
+      method: 'POST',
+      url: `/authority/meterial/check`,
+      data
+    })
+  },
+  preview (data) {
+    return axiosApi({
+      ...apiList.preview,
+      data
+    })
+  },
+  export (data) {
+    return axiosApi({
+      ...apiList.export,
+      responseType: "blob",
+      data
+    })
+  },
+  import (data) {
+    return axiosApi({
+      ...apiList.import,
+      data
+    })
+  }
+}

+ 444 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/material/Index.vue

@@ -0,0 +1,444 @@
+<!-- 【原材料管理】模块 -->
+<template>
+  <div class="app-container">
+		<!-- 搜索模块 -->
+    <div class="filter-container">
+    	<!-- 物料编码 -->
+    	<span>
+    		<span>物料编码:</span>
+    		<el-input v-model="queryParams.model.meterialCode" :placeholder='$t("common.pleaseEnter")' style="width: 150px;" size="medium"/>
+    	</span>
+    	<!-- 材料牌号 -->
+    	<span style="margin-left: 15px;">
+    		<span>材料牌号:</span>
+    		<el-input v-model="queryParams.model.tradeMark" :placeholder='$t("common.pleaseEnter")' style="width: 150px;" size="medium"/>
+    	</span>
+    	<!-- 规格型号 -->
+    	<span style="margin-left: 15px;">
+    		<span>规格型号:</span>
+    		<el-input v-model="queryParams.model.specification" :placeholder='$t("common.pleaseEnter")' style="width: 150px;" size="medium"/>
+    	</span>
+    	<!-- 状态 -->
+    	<span style="margin-left: 15px;">
+    		<span>{{$t("prepare.searchForm.status")}}:</span>
+    		<el-select v-model="queryParams.model.status" :placeholder='$t("common.pleaseSelect")' size="medium" style="width: 150px;">
+        	<el-option
+			      v-for="item in audioStatus"
+			      :key="item.value"
+			      :label="item.label"
+			      :value="item.value">
+			    </el-option>
+      	</el-select>
+    	</span>
+      <span style="margin-left: 15px;">
+	      <el-button plain type="primary" icon="el-icon-search" size="medium" @click="search">
+	        {{ $t("table.search") }}
+	      </el-button>
+	      <el-button plain type="warning" icon="el-icon-refresh" size="medium" @click="reset">
+	        {{ $t("table.reset") }}
+	      </el-button>
+      </span>
+    </div>
+
+    <!-- 功能按钮 -->
+    <el-row class="filter-container">
+    	<el-col>
+    		<el-button type="primary" icon="el-icon-plus" size="medium" v-has-permission="['toolsMaterial:add']" @click="add">{{ $t("common.add") }}</el-button>
+	      <el-button type="primary" icon="el-icon-edit" size="medium" v-has-permission="['toolsMaterial:set']" @click="trayOne">
+	        	接收
+	      </el-button>
+	      <el-button type="success" icon="el-icon-edit" size="medium" v-has-permission="['toolsMaterial:update']" @click="editOne">
+	        {{ $t("common.edit") }}
+	      </el-button>
+	      <el-button type="danger" icon="el-icon-delete" size="medium" v-has-permission="['toolsMaterial:delete']" @click="batchDelete">
+	        {{ $t("table.delete") }}
+	      </el-button>
+	      
+    	</el-col>
+    </el-row>
+
+		<!-- 列表数据 -->
+    <el-table
+      :key="tableKey"
+      ref="table"
+      v-loading="loading"
+      :data="tableData.records"
+      border
+      fit
+      row-key="id"
+      style="width: 100%;"
+      @selection-change="onSelectChange"
+      @cell-click="cellClick"
+    >
+    	<!-- 序号 -->
+    	<el-table-column :label='$t("common.serialNo")' width="55px" align="center">
+	      <template slot-scope="scope">
+	        <div>
+	          {{scope.$index+(queryParams.current - 1) * queryParams.size + 1}}
+	        </div>
+	      </template>
+      </el-table-column>
+      <!-- CheckBox -->
+      <el-table-column align="center" type="selection" width="50" :reserve-selection="true" />
+      <el-table-column prop="meterialCode" label='物料编码' :show-overflow-tooltip="true" width="150px"></el-table-column>
+      <el-table-column prop="tradeMark" label='材料牌号' :show-overflow-tooltip="true" width="200px"></el-table-column>
+      <el-table-column prop="equipmentName" label='器材名称' :show-overflow-tooltip="true"></el-table-column>
+	  	<el-table-column prop="specification" label='规格型号' :show-overflow-tooltip="true" width="150px"></el-table-column>
+      <el-table-column prop="handleStatus" label='处理状态' :show-overflow-tooltip="true" width="150px"></el-table-column>
+      <el-table-column prop="num" label='数量' :show-overflow-tooltip="true" width="150px"></el-table-column>
+      <el-table-column prop="status" label='启用状态' align="center" width="90px">
+      	<template slot-scope="{ row }">
+          <el-tag :type="row.status=='1' ? 'success' : 'danger'">
+          	{{ row.status=='1' ? $t("common.status.valid") : $t("common.frozen") }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <!-- 操作 -->
+      <el-table-column
+        :label="$t('table.operation')"
+        fixed="right"
+        align="center"
+        column-key="operation"
+        width="120px"
+      >
+        <template slot-scope="{ row }">
+        	<a href="javascript:;" style="color: #2db7f5;" @click="trayOne(row)">接收</a>
+        	<a href="javascript:;" style="color: #2db7f5;" @click="view(row)">接收记录</a>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <!-- 分页组件 -->
+    <pagination
+      v-show="tableData.total > 0"
+      :limit.sync="queryParams.size"
+      :page.sync="queryParams.current"
+      :total="Number(tableData.total)"
+      @pagination="fetch"
+    />
+    
+    <!-- 新增、修改 -->
+    <tenant-edit
+      ref="edit"
+      :dialog-visible="dialog.isVisible"
+      :title="dialog.title"
+      @close="editClose"
+      @success="editSuccess"
+    />
+    
+   	<!-- 詳情 -->
+    <tenant-view
+      ref="view"
+      :dialog-visible="tenantViewVisible"
+      @close="viewClose"
+    />
+    
+    <!-- 接收 -->
+    <receive
+      ref="editTray"
+      :dialog-visible="dialogTray.isVisible"
+      :title="dialogTray.title"
+      @close="editTrayClose"
+      @success="editTraySuccess"
+    />
+    
+  </div>
+</template>
+
+<script>
+	// 【分页】组件
+	import Pagination from "@/components/Pagination"
+	// 【新增、修改】组件
+	import TenantEdit from "./components/Edit"
+	// 【详情】组件
+	import TenantView from "./components/View"
+	// 【接收】组件
+	import Receive from "./components/Receive"
+	// 【原材料管理】-API
+	import MaterialApi from "@/api/prepareProductMgr/material"
+	import elDragDialog from '@/directive/el-drag-dialog'
+	import { downloadFile, initEnums, initDicts, initQueryParams } from '@/utils/commons'
+	// 共通工具方法(字典分解)
+	import { convertEnum } from '@/utils/utils'
+	import axios from 'axios'
+	export default {
+	  name: "Material",
+	  directives: { elDragDialog },
+	  components: { Pagination, TenantEdit, TenantView, Receive },
+	  props: {
+	  },
+	  data () {
+	    return {
+	    	audioStatus: [],
+	      dialog: {
+	        isVisible: false,
+	        title: ""
+	      },
+	      dialogTray: {
+	        isVisible: false,
+	        title: ""
+	      },
+	      brand: {
+	      	key: ''
+	      },
+	      preview: {
+	        isVisible: false,
+	        context: ''
+	      },
+	      tenantViewVisible: false,
+	      tableKey: 0,
+	      queryParams: initQueryParams({}),
+	      selection: [],
+	      loading: false,
+	      tableData: {
+	        total: 0
+	      },
+	      dicts: {
+          METERIAL_BRAND: {},  //工具材料品牌
+          METERIAL_CATEGORY: {},  //工具材料分类
+          MATERIAL_TYPE: {}  //工具材料毛坯成品分类
+        },
+	      enums: {
+	        TenantTypeEnum: {},
+	        TenantStatusEnum: {}
+	      }
+	    }
+	  },
+	  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+	  created() {
+	  	// 调用常量-审核状态
+	  	this.audioStatus = this.$constWKS.STATUSORTHERLIST
+	  	// 加载【字典】
+	  	initDicts(['METERIAL_BRAND', 'METERIAL_CATEGORY', 'MATERIAL_TYPE'], this.dicts);
+	  	// 加载列表数据
+	  	this.fetch()
+		},
+	  computed: {
+	    currentUser () {
+	      return this.$store.state.account.user
+	    },
+	    metbrandList() {
+        return convertEnum(this.dicts.METERIAL_BRAND)
+      },
+	    metcatgList() {
+        return convertEnum(this.dicts.METERIAL_CATEGORY)
+      },
+      materialTypeList() {
+        return convertEnum(this.dicts.MATERIAL_TYPE)
+      }
+	  },
+	  mounted () {
+
+	  },
+	  methods: {
+	    viewClose () {
+	      this.tenantViewVisible = false
+	    },
+	    editClose () {
+	      this.dialog.isVisible = false
+	    },
+	    editSuccess () {
+	      this.search()
+	    },
+	    editTrayClose () {
+	      this.dialogTray.isVisible = false
+	    },
+	    editTraySuccess () {
+	      this.search()
+	    },
+	    onSelectChange (selection) {
+	      this.selection = selection
+	    },
+	    search () {
+	      this.fetch({
+	        ...this.queryParams
+	      })
+	    },
+	    reset () {
+	      this.queryParams = initQueryParams({})
+	      this.brand = {key: ''};
+	      this.$refs.table.clearSort()
+	      this.$refs.table.clearFilter()
+	      this.search()
+	    },
+	    add () {
+	      this.$refs.edit.type = "add"
+	      this.$refs.edit.setTenant(false, this.dicts)
+	      this.dialog.title = this.$t("common.add")
+	      this.dialog.isVisible = true
+	    },
+	    singleDelete (row) {
+	      this.$refs.table.clearSelection()
+	      this.$refs.table.toggleRowSelection(row, true)
+	      this.batchDelete()
+	    },
+	    batchDelete () {
+	      if (!this.selection.length) {
+	        this.$message({
+	          message: this.$t("tips.noDataSelected"),
+	          type: "warning"
+	        })
+	        return
+	      }
+
+	      const readonlyIndex = this.selection.findIndex(item => item.readonly)
+
+	      if (readonlyIndex > -1) {
+	        this.$message({
+	          message: this.$t("tips.systemData"),
+	          type: "warning"
+	        })
+	        return
+	      }
+
+	      this.$confirm('删除【原材料】数据后,会将【原材料】数据全部删除,确认删除?', this.$t("common.tips"), {
+	      	distinguishCancelAndClose: true,
+	        confirmButtonText: this.$t("common.confirm"),
+	        cancelButtonText: this.$t("common.cancel"),
+	        type: "warning"
+	      }).then(() => {
+	      	const ids = []
+		      let contain = false
+		      this.selection.forEach(item => {
+		        if (item.readonly) {
+		          contain = true
+		          return
+		        }
+		        ids.push(item.id)
+		      })
+		      if (contain) {
+		        this.$message({
+		          message: this.$t("tips.systemData"),
+		          type: "warning"
+		        })
+		      } else {
+		        this.delete(ids)
+		      }
+	      }).catch(() => {})
+	    },
+	    clearSelections () {
+	      this.$refs.table.clearSelection()
+	    },
+	    delete (ids) {
+	      MaterialApi.remove({ ids: ids }).then(response => {
+	        const res = response.data
+	        if (res.isSuccess) {
+	          this.$message({
+	            message: this.$t("tips.deleteSuccess"),
+	            type: "success"
+	          })
+	          this.search()
+	          // 清理已经删除的数据
+	          this.$refs.table.clearSelection()
+	        }
+	      })
+	    },
+	    view (row) {
+	      this.$refs.view.setTenant(row)
+	      this.tenantViewVisible = true
+	    },
+	    // 【修改】表头上Btn-事件
+	    editOne() {
+	    	if (!this.selection.length) {
+	        this.$message({
+	          message: this.$t("tips.noDataSelected"),
+	          type: "warning"
+	        })
+	        return
+	      }
+	    	if (this.selection.length > 1) {
+	        this.$message({
+	          message: this.$t("tips.mustOne"),
+	          type: "warning"
+	        })
+	        return
+	      }
+	    	this.edit(this.selection[0]);
+	    },
+	    edit (row) {
+	      if (row.readonly) {
+	        this.$message({
+	          message: this.$t("tips.systemData"),
+	          type: "warning"
+	        })
+	        return
+	      }
+	      this.$refs.edit.setTenant(row, this.dicts)
+	      this.$refs.edit.type = "edit"
+	      this.dialog.title = this.$t("common.edit")
+	      this.dialog.isVisible = true
+	    },
+	    // 【设置可存放托盘】表头上Btn-事件
+	    trayOne() {
+	    	if (!this.selection.length) {
+		    	// 新增
+	    		this.addTray();
+		    	return
+	      }
+	    	if (this.selection.length > 1) {
+	        this.$message({
+	          message: this.$t("tips.mustOne"),
+	          type: "warning"
+	        })
+	        return
+	      }
+	    	// 打开弹出
+	    	this.tray(this.selection[0]);
+	    },
+	    
+	    // 修改【设置可存放托盘】
+	    tray(row) {
+	    	this.$refs.editTray.setTenant(row)
+	      this.$refs.editTray.type = "edit"
+	      this.dialogTray.title = "修改接收"
+	      this.dialogTray.isVisible = true
+	    },
+	    
+	    // 新增【设置可存放托盘】
+	    addTray() {
+	      this.$refs.editTray.type = "add"
+	      this.dialogTray.title = "新增接收"
+	      this.dialogTray.isVisible = true
+	    },
+	    
+	    fetch (params = {}) {
+	      this.loading = true
+	      if (this.queryParams.timeRange) {
+	        this.queryParams.map.createTime_st = this.queryParams.timeRange[0]
+	        this.queryParams.map.createTime_ed = this.queryParams.timeRange[1]
+	      }
+				//
+	      this.queryParams.current = params.current ? params.current : this.queryParams.current
+	      this.queryParams.size = params.size ? params.size : this.queryParams.size
+	      // 搜索条件添加
+	      this.queryParams.model.brand = this.brand
+	      MaterialApi.page(this.queryParams).then(response => {
+	        const res = response.data
+	        if (res.isSuccess) {
+	          this.tableData = res.data
+	        }
+	        // eslint-disable-next-line no-return-assign
+	      }).finally(() => this.loading = false)
+
+	    },
+	    
+	    cellClick (row, column) {
+	      if (column['columnKey'] === "operation") {
+	        return
+	      }
+	      let flag = false
+	      this.selection.forEach((item) => {
+	        if (item.id === row.id) {
+	          flag = true
+	          this.$refs.table.toggleRowSelection(row)
+	        }
+	      })
+
+	      if (!flag) {
+	        this.$refs.table.toggleRowSelection(row, true)
+	      }
+	    }
+	  }
+	}
+</script>
+<style lang="scss" scoped></style>

+ 328 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/material/components/Edit.vue

@@ -0,0 +1,328 @@
+<template>
+  <el-dialog
+  	:close-on-click-modal="false"
+  	:close-on-press-escape="false"
+  	:title="title"
+  	:append-to-body="true"
+  	:visible.sync="isVisible"
+  	:width="width"
+  	top="50px"
+  >
+    <el-form ref="form" :model="tenant" :rules="rules" label-position="right" label-width="130px">
+      <el-form-item label='物料编码:' prop="meterialCode">
+        <el-input v-model.trim="tenant.meterialCode" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <!--<el-form-item label='材料牌号:' prop="category" >
+        <el-select style="width:100%" :placeholder='$t("common.pleaseSelect")' v-model="tenant.category.key" value @change="selectCategory($event)">
+          <el-option :key="index" :label="item" :value="key" v-for="(item, key, index) in dicts.METERIAL_CATEGORY" />
+        </el-select>
+      </el-form-item>
+      <el-form-item :label='$t("prepare.table.tools.materialType")+":"' prop="materialType" v-show="materialTypeShowFlag">
+        <el-select style="width:100%" :placeholder='$t("common.pleaseSelect")' v-model="tenant.materialType.key" value>
+          <el-option :key="index" :label="item" :value="key" v-for="(item, key, index) in dicts.MATERIAL_TYPE" />
+        </el-select>
+      </el-form-item>
+      <el-form-item :label='$t("prepare.table.tools.brand")+":"' prop="brand">
+      	<el-select style="width:100%" :placeholder='$t("common.pleaseSelect")' v-model="tenant.brand.key" value>
+          <el-option :key="index" :label="item" :value="key" v-for="(item, key, index) in dicts.METERIAL_BRAND" />
+        </el-select>
+      </el-form-item>-->
+      <el-form-item label='材料牌号:' prop="tradeMark">
+        <el-input v-model.trim="tenant.tradeMark" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <el-form-item label='器材名称:' prop="equipmentName">
+        <el-input v-model.trim="tenant.equipmentName" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <el-form-item label='规格型号:' prop="specification">
+        <el-input v-model.trim="tenant.specification" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>      
+      <!--<el-form-item :label='$t("prepare.table.tools.joinDate")+":"' prop="joinDate">        
+        <el-date-picker
+            v-model="tenant.joinDate"
+            type="date"
+            value-format="yyyy-MM-dd"            
+            placeholder="">
+         </el-date-picker>
+      </el-form-item>-->
+      <el-form-item label='处理状态:' prop="handleStatus">
+        <el-input v-model.trim="tenant.handleStatus" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item> 
+      <!-- 启用状态 -->
+      <el-form-item :label='$t("prepare.table.tools.status")+":"' prop="status">
+        <template>
+				  <el-radio v-model="tenant.status" label="1">{{$t("common.status.valid")}}</el-radio>
+				  <el-radio v-model="tenant.status" label="0">{{$t("common.frozen")}}</el-radio>
+				</template>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button plain type="warning" @click="isVisible = false">{{ $t('common.cancel') }}</el-button>
+      <el-button plain type="primary" :disabled="confirmDisabled" @click="submitForm">{{ $t('common.confirm') }}</el-button>
+    </div>
+  </el-dialog>
+</template>
+<script>
+	// 【原材料管理】-API
+	import MaterialApi from "@/api/prepareProductMgr/material"
+	export default {
+	  name: 'TenantEdit',
+	  props: {
+	    dialogVisible: {
+	      type: Boolean,
+	      default: false
+	    },
+	    title: {
+	      type: String,
+	      default: ''
+	    }
+	  },
+	  data () {
+	    return {
+	    	loading: false,
+	      type: 'add',
+	      tableData: [],
+	      materialTypeShowFlag: false,
+	      tenant: this.initTenant(),
+	      screenWidth: 0,
+	      width: this.initWidth(),
+	      confirmDisabled: false,
+	      dicts: {
+		      METERIAL_BRAND: {},  //工具材料品牌
+		      METERIAL_CATEGORY: {}, //工具材料分类
+	        MATERIAL_TYPE: {}  //工具材料毛坯成品分类
+		    },
+	      roles: [],
+	      rules: {
+	        meterialCode: [
+	        	{ required: true, message: this.$t("rules.require"), trigger: 'blur' }
+	        ],
+	        tradeMark: [
+	        	{ required: true, message: this.$t("rules.require"), trigger: 'blur' }
+	        ],
+	        specification: [
+	        	{ required: true, message: this.$t("rules.require"), trigger: 'blur' }
+	        ]
+	      }
+	    }
+	  },
+	  computed: {
+	    isVisible: {
+	      get () {
+	        return this.dialogVisible
+	      },
+	      set () {
+	        this.close()
+	        this.reset()
+	      }
+	    }
+	  },
+	  mounted () {
+	    window.onresize = () => {
+	      return (() => {
+	        this.width = this.initWidth()
+	      })()
+	    }
+	  },
+	  methods: {
+	  	// 【新增】按钮-事件
+	    addRes(){
+	      this.tableData.push({
+	      	key: "WKS_"+ Math.random(),
+	      	id: "",
+	      	tradeMark: "",
+	      	specification: "",
+	      	isEdit: true
+	      })
+	    },
+	    // Table的选择事件
+	    onSelectChange (selection) {
+	      this.selection = selection
+	    },
+	    // 【删除】按钮事件
+	    singleDelete(row){
+	    	this.$confirm("删除数据后,将会消失,您的努力将白费,请确认删除?", this.$t("common.tips"), {
+	      	distinguishCancelAndClose: true,
+	        confirmButtonText: "确认",
+	        cancelButtonText: "取消",
+	        type: "warning"
+	      }).then(() => {
+	      	// 过滤符合条件的数据
+	      	let arr = this.tableData.filter(item => item.key != row.key || item.id != row.id)
+	      	// 给新的数据赋值
+	    		this.tableData = arr;
+	      }).catch(() => {})
+	    },
+	    // 【修改】按钮事件
+	    edit(row){
+	    	let list = new Array();
+	    	this.tableData.forEach((item, index) => {
+	    		// 当前编辑行
+	    		if(!!item.id && item.id == row.id){
+	    			item.isEdit = true
+	    		}
+	    		list.push(item)
+	    	})
+	    	// 赋值给当前
+	    	this.tableData = list
+	    },
+	    initTenant () {
+	      return {
+	      	meterialCode: '',
+	        tradeMark: '',
+	        equipmentName: '',
+	        specification: '',
+	        handleStatus: '',
+	        status: '1'
+	      }
+	    },
+	
+	    selectCategory(id){
+	      if("04" === id){
+	          this.materialTypeShowFlag = true;
+	      }else{
+	          this.materialTypeShowFlag = false;
+	      }
+	    },
+	    
+	    initWidth () {
+	      this.screenWidth = document.body.clientWidth
+	      if (this.screenWidth < 991) {
+	        return '90%'
+	      } else if (this.screenWidth < 1400) {
+	        return '45%'
+	      } else {
+	        return '800px'
+	      }
+	    },
+	    
+	    setTenant (val, dicts) {
+	    	if(val){
+	    		this.tenant = { ...val }
+	    		/*if("04" === this.tenant.category.key){
+	            this.materialTypeShowFlag = true;
+	        }else{
+	            this.materialTypeShowFlag = false;
+	        }*/
+	    		// 根据id,查询规格列表数据
+	    		// this.getSpecsList(val)
+	    	}
+	      // 字典表
+	      this.dicts = dicts
+	    },
+	    close () {
+	      this.$emit('close')
+	    },
+	    reset () {
+	      // 先清除校验,再清除表单,不然有奇怪的bug
+	      this.$refs.form.clearValidate()
+	      this.$refs.form.resetFields()
+	      this.tenant = this.initTenant()
+	      this.tableData = []  	//清空【规格】数据
+	    },
+	    submitForm () {
+	    	//console.log("Form数据:", this.tenant)
+	      this.$refs.form.validate((valid) => {
+	        if (valid) {
+	          this.confirmDisabled = true
+	          if (this.type === 'add') {
+	            this.save()
+	          } else {
+	            this.update()
+	          }
+	        } else {
+	          return false
+	        }
+	      })
+	    },
+	    
+	    save () {
+	      console.log(this.tenant)
+	      MaterialApi.save(this.tenant)
+	        .then((response) => {
+	          const res = response.data
+	          if (res.isSuccess) {
+	            this.isVisible = false
+	            this.$message({
+	              message: this.$t('tips.createSuccess'),
+	              type: 'success'
+	            })
+	            // 通知列表
+		          this.$emit("success");
+		          // 通知列表-并关闭弹出框
+		          this.$emit("close");
+	          }
+	        }).finally(() => {
+	          this.confirmDisabled = false
+	          return true
+	        })
+	    },
+	    update () {
+	      MaterialApi.update(this.tenant)
+	        .then((response) => {
+	          const res = response.data
+	          if (res.isSuccess) {
+	            this.isVisible = false
+	            this.$message({
+	              message: this.$t('tips.updateSuccess'),
+	              type: 'success'
+	            })
+	            // 通知列表
+		          this.$emit("success");
+		          // 通知列表-并关闭弹出框
+		          this.$emit("close");
+	          }
+	        }).finally(() => {
+	          this.confirmDisabled = false
+	          return true
+	        })
+	    },
+	    // 根据【工具原材料】的id,查询,规格列表数据
+	    getSpecsList(row){
+	    	/*let obj = {
+	    		current: 1,
+	    		size: 1000,
+	    		model: {
+	    			meterialId: row.id
+	    		}
+	    	}*/
+	    	MaterialApi.listSpecs({meterialId: row.id}).then(res => {
+	    		res = res.data
+	    		console.log("规格数据:", res)
+	    		if(res.isSuccess){
+	    			this.tableData = res.data
+	    		}
+	    	})
+	    }
+	  }
+	}
+</script>
+<style lang="scss" >
+.avatar-uploader .el-upload {
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+  border-color: #409eff;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 100px;
+  height: 100px;
+  line-height: 100px;
+  text-align: center;
+}
+.avatar {
+  width: 100px;
+  height: 100px;
+  display: block;
+}
+.checkUsed{
+	display: inline-block;
+	margin-left: 10px;
+	color: #1890ff;
+}
+</style>

+ 270 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/material/components/Receive.vue

@@ -0,0 +1,270 @@
+<template>
+  <el-dialog 
+  	:close-on-click-modal="false" 
+  	:close-on-press-escape="false" 
+  	:title="title" 
+  	:append-to-body="true"
+  	:visible.sync="isVisible" 
+  	:width="width" 
+  	top="50px"
+  >
+    <el-form ref="form" :model="tenant" :rules="rules" label-position="right" label-width="120px">
+    	<!--<el-form-item :label='$t("lineSide.form.trayList")+ ":"' prop="trayList">
+	    	<el-select v-model="tenant.trayList" multiple :placeholder='$t("common.pleaseSelect")' style="width: 100%;">
+			    <el-option
+			      v-for="item in options"
+			      :key="item.value"
+			      :label="item.label"
+			      :value="item.value">
+			    </el-option>
+			  </el-select>
+		  </el-form-item>-->
+		  <el-form-item label='原料炉批号:' prop="name">
+        <el-input v-model.trim="tenant.name" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <el-form-item label='零件批号:' prop="name2">
+        <el-input v-model.trim="tenant.name2" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <el-form-item label='批量标准:' prop="name3">
+        <el-input v-model.trim="tenant.name3" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <el-form-item label='毛坯生产厂:' prop="name4">
+        <el-input v-model.trim="tenant.name4" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <el-form-item label='毛坯批号:' prop="name5">
+        <el-input v-model.trim="tenant.name5" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <el-form-item label='入厂日期:' prop="joinDate">        
+        <el-date-picker
+            v-model="tenant.joinDate"
+            type="date"
+            value-format="yyyy-MM-dd"            
+            placeholder="">
+         </el-date-picker>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button plain type="warning" @click="isVisible = false">{{ $t('common.cancel') }}</el-button>
+      <el-button plain type="primary" :disabled="confirmDisabled" @click="submitForm">{{ $t('common.confirm') }}</el-button>
+    </div>
+  </el-dialog>
+</template>
+<script>
+// 【仓库类型管理】-API
+import warehouseTypeMgrApi from "@/api/modelingCenter/warehouseTypeMgr"
+// 【原材料管理】-API
+import MaterialApi from "@/api/prepareProductMgr/material"
+// 【库位管理】-API
+import locationMgrApi from "@/api/lineSideLibrary/locationMgr"
+export default {
+  name: 'TenantEdit',
+  props: {
+    dialogVisible: {
+      type: Boolean,
+      default: false
+    },
+    title: {
+      type: String,
+      default: ''
+    }
+  },
+  data () {
+    return {
+      type: 'add',
+      currNodeName: '',
+      tenant: this.initTenant(),
+      screenWidth: 0,
+      width: this.initWidth(),
+      confirmDisabled: false,
+      wareTypeList: [], // 库位类型下拉数据
+      options: [{
+          value: '选项1',
+          label: '黄金糕'
+        }, {
+          value: '选项2',
+          label: '双皮奶'
+        }, {
+          value: '选项3',
+          label: '蚵仔煎'
+        }, {
+          value: '选项4',
+          label: '龙须面'
+        }, {
+          value: '选项5',
+          label: '北京烤鸭'
+        }],
+      roles: [],
+      rules: {
+      	name: [
+        	{ required: true, message: this.$t("rules.require"), trigger: 'blur' }
+        ],
+        name2: [
+        	{ required: true, message: this.$t("rules.require"), trigger: 'blur' }
+        ],
+        name3: [
+        	{ required: true, message: this.$t("rules.require"), trigger: 'change' }
+        ],
+        name4: [
+        	{ required: true, message: this.$t("rules.require"), trigger: 'change' }
+        ],
+        name5: [
+        	{ required: true, message: this.$t("rules.require"), trigger: 'change' }
+        ]
+      }
+    }
+  },
+  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+  created() {
+  	// 获取【库位类型】数据
+  	this.getWareTypeList()
+	},
+  computed: {
+    isVisible: {
+      get () {
+        return this.dialogVisible
+      },
+      set () {
+        this.close()
+        this.reset()
+      }
+    }
+  },
+  mounted () {
+    window.onresize = () => {
+      return (() => {
+        this.width = this.initWidth()
+      })()
+    }
+  },
+  methods: {
+    initTenant () {
+      return {
+        id: '',
+        trayList: [],
+        no: '',
+        name: '',
+        shelvesId: '',
+        storgeTypeId: '',
+        status: '1'
+      }
+    },
+    initWidth () {
+      this.screenWidth = document.body.clientWidth
+      if (this.screenWidth < 991) {
+        return '90%'
+      } else if (this.screenWidth < 1400) {
+        return '45%'
+      } else {
+        return '800px'
+      }
+    },
+    setTenant (val) {
+    	if(val){
+    		this.tenant = { ...val }
+    	}
+    },
+    close () {
+      this.$emit('close')
+    },
+    reset () {
+      // 先清除校验,再清除表单,不然有奇怪的bug
+      this.$refs.form.clearValidate()
+      this.$refs.form.resetFields()
+      this.tenant = this.initTenant()
+    },
+    submitForm () {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.confirmDisabled = true
+          if (this.type === 'add') {
+            this.save()
+          } else {
+            this.update()
+          }
+        } else {
+          return false
+        }
+      })
+    },
+    save () {
+      locationMgrApi.save(this.tenant)
+        .then((response) => {
+          const res = response.data
+          if (res.isSuccess) {
+            this.isVisible = false
+            this.$message({
+              message: this.$t('tips.createSuccess'),
+              type: 'success'
+            })
+            // 通知列表
+	          this.$emit("success");
+	          // 通知列表-并关闭弹出框
+	          this.$emit("close");
+          }
+        }).finally(() => {
+          this.confirmDisabled = false
+          return true
+        })
+    },
+    update () {
+      locationMgrApi.update(this.tenant)
+        .then((response) => {
+          const res = response.data
+          if (res.isSuccess) {
+            this.isVisible = false
+            this.$message({
+              message: this.$t('tips.updateSuccess'),
+              type: 'success'
+            })
+            // 通知列表
+	          this.$emit("success");
+	          // 通知列表-并关闭弹出框
+	          this.$emit("close");
+          }
+        }).finally(() => {
+          this.confirmDisabled = false
+          return true
+        })
+    },
+    // 【库位类型】数据
+		getWareTypeList(){
+			warehouseTypeMgrApi.getList({}).then(res => {
+				res = res.data 
+				if(res.isSuccess){
+					this.wareTypeList = res.data
+				}
+			})
+		}
+  }
+}
+</script>
+<style lang="scss" >
+.avatar-uploader .el-upload {
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+  border-color: #409eff;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 100px;
+  height: 100px;
+  line-height: 100px;
+  text-align: center;
+}
+.avatar {
+  width: 100px;
+  height: 100px;
+  display: block;
+}
+.checkUsed{
+	display: inline-block;
+	margin-left: 10px;
+	color: #1890ff;
+}
+</style>

+ 199 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/material/components/View.vue

@@ -0,0 +1,199 @@
+<template>
+  <el-dialog
+    title="接收物料"
+    width="1200px"
+    :append-to-body="true"
+    :visible.sync="isVisible"
+    class="tenant-view"
+  >
+    <div>
+    	<!-- 列表数据 -->
+	    <el-table
+	      :key="tableKey"
+	      ref="table"
+	      v-loading="loading"
+	      :data="tableData.records"
+	      border
+	      fit
+	      row-key="id"
+	      style="width: 100%;"
+	      @selection-change="onSelectChange"
+	      @cell-click="cellClick"
+	    >
+	    	<!-- 序号 -->
+	    	<el-table-column :label='$t("common.serialNo")' width="55px" align="center">
+		      <template slot-scope="scope">
+		        <div>
+		          {{scope.$index+(queryParams.current - 1) * queryParams.size + 1}}
+		        </div>
+		      </template>
+	      </el-table-column>
+	      <!-- CheckBox -->
+	      <el-table-column align="center" type="selection" width="50" :reserve-selection="true" />
+	      <el-table-column prop="no" label='原炉(批)号' :show-overflow-tooltip="true" width="150px"></el-table-column>
+	      <el-table-column prop="name" label='物料编码' :show-overflow-tooltip="true" width="200px"></el-table-column>
+	      <el-table-column prop="model" label='材料牌号' :show-overflow-tooltip="true"></el-table-column>
+		  	<el-table-column prop="heatNo" label='供应方名称' :show-overflow-tooltip="true" width="150px"></el-table-column>
+	      <el-table-column prop="materialNo" label='毛坯批号' :show-overflow-tooltip="true" width="150px"></el-table-column>
+	      <el-table-column prop="brand.data" label='入厂日期' :show-overflow-tooltip="true" width="150px"></el-table-column>
+	      <el-table-column prop="brand.data" label='接收数量' :show-overflow-tooltip="true" width="150px"></el-table-column>
+	      <el-table-column prop="brand.data" label='操作人员' :show-overflow-tooltip="true" width="150px"></el-table-column>
+	      <el-table-column prop="brand.data" label='操作时间' :show-overflow-tooltip="true" width="150px"></el-table-column>
+	      <el-table-column prop="brand.data" label='订单消耗数量' :show-overflow-tooltip="true" width="150px"></el-table-column>
+	    </el-table>
+	    
+	    <!-- 分页组件 -->
+	    <pagination
+	      v-show="tableData.total > 0"
+	      :limit.sync="queryParams.size"
+	      :page.sync="queryParams.current"
+	      :total="Number(tableData.total)"
+	      @pagination="fetch"
+	    />
+	    
+    </div>
+  </el-dialog>
+</template>
+<script>
+	// 【分页】组件
+	import Pagination from "@/components/Pagination"
+	// 【原材料管理】-API
+	import MaterialApi from "@/api/prepareProductMgr/material"
+	// 【共通-工具】
+	import { initQueryParams } from '@/utils/commons'
+	export default {
+	  name: 'TenantView',
+	  components: { Pagination },
+	  props: {
+	    dialogVisible: {
+	      type: Boolean,
+	      default: false
+	    }
+	  },
+	  data () {
+	    return {
+	      screenWidth: 0,
+	      width: this.initWidth(),
+	      tenant: {},
+	      tableKey: 0,
+	      queryParams: initQueryParams({}),
+	      selection: [],
+	      loading: false,
+	      tableData: {
+	        total: 0
+	      },
+	    }
+	  },
+	  computed: {
+	  	// 定义【可存储变量】
+	    isVisible: {
+	      get () {
+	        return this.dialogVisible
+	      },
+	      set () {
+	        this.close()
+	      }
+	    }
+	  },
+	  mounted () {
+	  	// 页面大小变化,自动变化
+	    window.onresize = () => {
+	      return (() => {
+	        this.width = this.initWidth()
+	      })()
+	    }
+	  },
+	  methods: {
+	  	// 初始化页面的宽度
+	    initWidth () {
+	      this.screenWidth = document.body.clientWidth
+	      if (this.screenWidth < 550) {
+	        return '95%'
+	      } else if (this.screenWidth < 990) {
+	        return '580px'
+	      } else if (this.screenWidth < 1400) {
+	        return '600px'
+	      } else {
+	        return '650px'
+	      }
+	    },
+	    
+	    // 接收来自其他组件的-函数
+	    setTenant (val) {
+	      this.tenant = { ...val }
+	    },
+	    
+	    // 【关闭】当前弹出框
+	    close () {
+	      this.$emit('close')
+	    },
+	    
+	    // checkbox选择-事件
+	    onSelectChange (selection) {
+	      this.selection = selection
+	    },
+	    
+	    // 分页列表
+	    fetch (params = {}) {
+	      this.loading = true
+	      if (this.queryParams.timeRange) {
+	        this.queryParams.map.createTime_st = this.queryParams.timeRange[0]
+	        this.queryParams.map.createTime_ed = this.queryParams.timeRange[1]
+	      }
+				//
+	      this.queryParams.current = params.current ? params.current : this.queryParams.current
+	      this.queryParams.size = params.size ? params.size : this.queryParams.size
+	      // 搜索条件添加
+	      this.queryParams.model.brand = this.brand
+	      MaterialApi.page(this.queryParams).then(response => {
+	        const res = response.data
+	        if (res.isSuccess) {
+	          this.tableData = res.data
+	        }
+	        // eslint-disable-next-line no-return-assign
+	      }).finally(() => this.loading = false)
+
+	    },
+	    
+	    // Table的cell点击事件
+	    cellClick (row, column) {
+	      if (column['columnKey'] === "operation") {
+	        return
+	      }
+	      let flag = false
+	      this.selection.forEach((item) => {
+	        if (item.id === row.id) {
+	          flag = true
+	          this.$refs.table.toggleRowSelection(row)
+	        }
+	      })
+
+	      if (!flag) {
+	        this.$refs.table.toggleRowSelection(row, true)
+	      }
+	    }
+	  }
+	}
+</script>
+<style lang="scss" scoped>
+.tenant-view {
+  .img-wrapper {
+    text-align: center;
+    margin-top: -1.5rem;
+    margin-bottom: 10px;
+    img {
+      width: 4rem;
+      border-radius: 50%;
+    }
+  }
+  .view-item {
+    margin: 7px;
+    i {
+      font-size: 0.97rem;
+    }
+    span {
+      margin-left: 5px;
+    }
+  }
+}
+</style>