Просмотр исходного кода

实现工装管理和原材料管理功能模块

oyq28 3 лет назад
Родитель
Сommit
62064db64e

+ 1 - 0
imcs-ui/package.json

@@ -86,6 +86,7 @@
     "chokidar": "2.1.5",
     "compression-webpack-plugin": "^5.0.1",
     "connect": "3.6.6",
+    "core-js": "^2.6.12",
     "eslint": "5.15.3",
     "eslint-plugin-vue": "5.2.2",
     "html-webpack-plugin": "3.2.0",

+ 138 - 0
imcs-ui/src/api/prepareProductMgr/frockMgr.js

@@ -0,0 +1,138 @@
+/******************** 【工具原材料管理】API ***********************/
+import axiosApi from '../AxiosApi.js'
+
+const apiList = {
+	getList: {
+    method: 'POST',
+    url: `/authority/mToolClamp/all`
+  },
+  page: {
+    method: 'POST',
+    url: `/authority/mToolClamp/page`
+  },
+  update: {
+    method: 'POST',
+    url: `/authority/mToolClamp/update`
+  },
+  save: {
+    method: 'POST',
+    url: `/authority/mToolClamp`
+  },
+  updateStatus: {
+    method: 'POST',
+    url: `/authority/mToolClamp/status`
+  },
+  remove: {
+    method: 'DELETE',
+    url: `/authority/mToolClamp`
+  },
+  delete: {
+    method: 'POST',
+    url: `/authority/mToolClamp/delete`
+  },
+  list: {
+    method: 'POST',
+    url: `/authority/mToolClamp/query`
+  },  
+  preview: {
+    method: 'POST',
+    url: `/authority/mToolClamp/preview`
+  },
+  export: {
+    method: 'POST',
+    url: `/authority/mToolClamp/export`
+  },
+  import: {
+    method: 'POST',
+    url: `/authority/mToolClamp/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/mToolClamp/check/${code}`
+    })
+  },
+  checkField (data) {
+    return axiosApi({
+      method: 'POST',
+      url: `/authority/mToolClamp/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
+    })
+  }
+}

+ 13 - 6
imcs-ui/src/lang/zh/prepare.js

@@ -127,14 +127,21 @@ export default {
 		table: {
 			// 【工具原材料管理】列表table字段名称
 			tools: {
-				no: '编号',
-				name: '名称',
-				model: '型号',
+				no: '物料编号',
+				name: '器材名称',
+				model: '规格型号',
 				specification: '规格',
-				brand: '品牌',
+				brand: '供应方名称',
 				tradeMark: '牌号',
-				category: '分类',
-       		materialType: '物料类型',
+				category: '物料类型',
+				heatNo: '原炉批号',
+				mapNo: '图号',
+				period: '周期',
+				num: '数量',
+				expiryDate: '有效期',
+				materialNo: '材料编号',				
+				joinDate: '入厂日期',
+       			materialType: '物料类型',
 				status: '启用状态',
 				remark: '备注',
 				jjPosion: '可加工夹紧位置',

+ 464 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/frockMgr/Index.vue

@@ -0,0 +1,464 @@
+<template>
+  <div class="app-container">
+		<!-- 搜索模块 -->
+    <div class="filter-container">
+    	<span>
+    		<span>{{$t("prepare.searchForm.name")}}:</span>
+    		<el-input v-model="queryParams.model.name" :placeholder='$t("common.pleaseEnter")' style="width: 150px;" size="medium"/>
+    	</span>
+    	<span style="margin-left: 15px;">
+    		<span>{{$t("prepare.searchForm.brand")}}:</span>
+    		<el-select style="width:150px;" :placeholder='$t("common.pleaseSelect")' v-model="brand.key" value size="medium">
+          <el-option :key="index" :label="item" :value="key" v-for="(item, key, index) in dicts.METERIAL_BRAND" />
+        </el-select>
+    	</span>
+    	<span style="margin-left: 15px;">
+    		<span>{{$t("prepare.searchForm.model")}}:</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" @click="add">{{ $t("common.add") }}</el-button>
+	      <el-button type="success" icon="el-icon-edit" size="medium" @click="editOne">
+	        {{ $t("common.edit") }}
+	      </el-button>
+	      <el-button type="danger" icon="el-icon-delete" size="medium" @click="batchDelete">
+	        {{ $t("table.delete") }}
+	      </el-button>
+	      <!-- 设置可存放托盘 -->
+	      <el-button type="success" icon="el-icon-edit" size="medium" @click="trayOne" v-show="false">
+	        {{ $t("lineSide.common.trayBtn") }}
+	      </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>
+      <el-table-column align="center" type="selection" width="50" :reserve-selection="true" />
+      <el-table-column prop="no" :label='$t("prepare.table.tools.no")' :show-overflow-tooltip="true" width="120px"></el-table-column>
+      <el-table-column prop="name" :label='$t("prepare.table.tools.name")' :show-overflow-tooltip="true" width="150px"></el-table-column>
+      <!--<el-table-column prop="model" :label='$t("prepare.table.tools.model")' :show-overflow-tooltip="true" width="150px"></el-table-column>-->
+	  
+	  <el-table-column prop="mapNo" :label='$t("prepare.table.tools.mapNo")' :show-overflow-tooltip="true" width="100px"></el-table-column>
+      <el-table-column prop="period" :label="$t('prepare.table.tools.period')+' (月)'" align="center" :show-overflow-tooltip="true" width="80px"></el-table-column>
+      <el-table-column prop="expiryDate" :label="$t('prepare.table.tools.expiryDate')+' (月)'" align="center" :show-overflow-tooltip="true" width="100px"></el-table-column>
+	  <el-table-column prop="joinDate" :label='$t("prepare.table.tools.joinDate")' :show-overflow-tooltip="true" width="120px"></el-table-column>
+
+      <!--<el-table-column prop="specification" :label='$t("prepare.table.tools.specification")' :show-overflow-tooltip="true" width="250px"></el-table-column>-->
+      <el-table-column prop="brand.data" :label='$t("prepare.table.tools.brand")' align="center" :show-overflow-tooltip="true" width="120px"></el-table-column>
+      <el-table-column prop="category.data" :label='$t("prepare.table.tools.category")' align="center" :show-overflow-tooltip="true" width="120px"></el-table-column>
+      <el-table-column prop="num" :label='$t("prepare.table.tools.num")' :show-overflow-tooltip="true" align="center" width="70px"></el-table-column>
+	  <el-table-column prop="status" :label='$t("prepare.table.tools.status")' align="center" width="100px">
+      	<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="100px"
+      >
+        <template slot-scope="{ row }">
+        	<!--<el-tooltip class="item" content="查看详情" effect="dark" placement="top-start">
+	          <i
+	            class="el-icon-view table-operation"
+	            style="color: #87d068;"
+	            @click="view(row)"
+	          />
+          </el-tooltip>-->
+          <el-tooltip class="item" :content='$t("common.edit")' effect="dark" placement="top-start">
+	          <i
+	            class="el-icon-edit table-operation"
+	            style="color: #2db7f5;"
+	            @click="edit(row)"
+	          />
+          </el-tooltip>
+          <el-tooltip class="item" :content='$t("common.delete")' effect="dark" placement="top-start">
+	          <i
+	            class="el-icon-delete table-operation"
+	            style="color: #f50;"
+	            @click="singleDelete(row)"
+	          />
+          </el-tooltip>
+        </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"
+    />
+    
+    <!-- 设置可存放托盘 -->
+    <setting-tray
+      ref="editTray"
+      :dialog-visible="dialogTray.isVisible"
+      :title="dialogTray.title"
+      @close="editTrayClose"
+      @success="editTraySuccess"
+    />
+    
+    <el-dialog
+      v-el-drag-dialog
+      :close-on-click-modal="false"
+      :close-on-press-escape="true"
+      title="预览"
+      width="80%"
+      top="50px"
+      :visible.sync="preview.isVisible"
+    >
+      <el-scrollbar>
+        <div v-html="preview.context" />
+      </el-scrollbar>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+	import Pagination from "@/components/Pagination"
+	import TenantEdit from "./components/Edit"
+	import TenantView from "./components/View"
+	// 【工装管理】-API	
+	import frockMgrApi from "@/api/prepareProductMgr/frockMgr"
+	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: "ToolsClamp",
+	  directives: { elDragDialog },
+	  components: { Pagination, TenantEdit, TenantView },
+	  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.$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("prepare.tips.toolTips"), 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) {
+	      frockMgrApi.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.$t("lineSide.common.editTray")
+	      this.dialogTray.isVisible = true
+	    },
+	    
+	    // 新增【设置可存放托盘】
+	    addTray() {
+	      this.$refs.editTray.type = "add"
+	      this.dialogTray.title = this.$t("lineSide.common.addTray")
+	      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
+	      frockMgrApi.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>

+ 443 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/frockMgr/components/Edit.vue

@@ -0,0 +1,443 @@
+<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='$t("prepare.table.tools.name")+":"' prop="name">
+        <el-input v-model="tenant.name" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <el-form-item :label='$t("prepare.table.tools.category")+":"' 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='$t("prepare.table.tools.model")+":"' prop="model">
+        <el-input v-model="tenant.model" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <el-form-item :label='$t("prepare.table.tools.mapNo")+":"' prop="mapNo">
+        <el-input v-model="tenant.mapNo" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <el-form-item :label='$t("prepare.table.tools.period")+":"' prop="period">
+        <el-input-number v-model="tenant.period" :min="1" :max="1000" label="12"></el-input-number>
+      </el-form-item>
+      <el-form-item :label="$t('prepare.table.tools.expiryDate')+':'" prop="expiryDate">
+        <el-input-number v-model="tenant.expiryDate" :min="1" :max="1000" label="12"></el-input-number>
+      </el-form-item>
+      <el-form-item :label='$t("prepare.table.tools.num")+":"' prop="num">
+        <el-input-number v-model="tenant.num" :min="1" :max="1000" label="1"></el-input-number>
+      </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='$t("prepare.table.tools.specification")+":"' v-show="false">
+        <!-- 功能按钮 -->
+		    <el-row class="filter-container">
+		    	<el-col>
+		    		<el-button type="primary" icon="el-icon-plus" size="medium" @click="addRes">新增</el-button>
+		    	</el-col>
+		    </el-row>
+		    <!-- Table数据 -->
+				<el-table
+		      ref="table"
+		      v-loading="loading"
+		      :data="tableData"
+		      border
+		      fit
+		      style="width: 100%;"
+		      @selection-change="onSelectChange"
+		    >
+		      <el-table-column prop="tradeMark" :label='$t("prepare.table.tools.tradeMark")' align="center" width="180px">
+		      	<template slot-scope="{ row }">
+		      		<el-input size="small" v-model="row.tradeMark" v-if="row.isEdit" :placeholder='$t("common.pleaseEnter")'></el-input>
+		      		<span v-else>{{row.tradeMark}}</span>
+		      	</template>
+		      </el-table-column>
+		      <!--<el-table-column prop="type" label="类型" width="120px">
+		      	<template slot-scope="{ row }">
+		      		<el-select v-model="row.type" size="small" v-if="row.isEdit" placeholder="请选择类型">
+		        		<el-option
+						      v-for="item in typeList"
+						      :key="item.value"
+						      :label="item.label"
+						      :value="item.value">
+						    </el-option>
+		          </el-select>
+		      		<span v-else="">{{row.type}}</span>
+		      	</template>
+		      </el-table-column>-->
+		      <el-table-column prop="specification" :label='$t("prepare.table.tools.specification")'>
+		      	<template slot-scope="{ row }">
+		      		<el-input size="small" v-model="row.specification" v-if="row.isEdit" :placeholder='$t("common.pleaseEnter")'></el-input>
+		      		<span v-else>{{row.specification}}</span>
+		      	</template>
+		      </el-table-column>
+		      <el-table-column
+		        :label="$t('table.operation')"
+		        fixed="right"
+		        align="center"
+		        column-key="operation"
+		        width="100px"
+		      >
+		        <template slot-scope="{ row }">
+		        	<el-tooltip class="item" :content='$t("common.edit")' effect="dark" placement="top-start">
+			          <i
+			            class="el-icon-edit table-operation"
+			            style="color: #2db7f5;"
+			            @click="edit(row)"
+			          />
+			        </el-tooltip>
+		          <el-tooltip class="item" :content='$t("common.delete")' effect="dark" placement="top-start">
+			          <i
+			            class="el-icon-delete table-operation"
+			            style="color: #f50;"
+			            @click="singleDelete(row)"
+			          />
+		          </el-tooltip>
+		        </template>
+		      </el-table-column>
+		    </el-table>
+      </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 frockMgrApi from "@/api/prepareProductMgr/frockMgr"
+
+export default {
+  name: 'TenantEdit',
+  props: {
+    dialogVisible: {
+      type: Boolean,
+      default: false
+    },
+    title: {
+      type: String,
+      default: ''
+    }
+  },
+  data () {
+    return {
+    	loading: false,
+      type: 'add',
+      tableData: [],
+      tenant: this.initTenant(),
+      screenWidth: 0,
+      width: this.initWidth(),
+      confirmDisabled: false,
+      materialTypeShowFlag: false,
+      dicts: {
+	      METERIAL_BRAND: {},  //工具材料品牌
+	      METERIAL_CATEGORY: {}, //工具材料分类
+        MATERIAL_TYPE: {}  //工具材料毛坯成品分类
+	    },
+      roles: [],
+      rules: {
+        name: [
+        	{ required: true, message: this.$t("rules.require"), trigger: 'blur' },
+        ],
+        model: [
+        	{ required: true, message: this.$t("rules.require"), trigger: 'blur' },
+        ],
+        category: [
+        	{ required: true, message: this.$t("rules.require"), trigger: 'blur' },
+        ],
+        joinDate: [
+        	{ required: true, message: this.$t("rules.require"), trigger: 'blur' },
+        ],
+        materialType: [
+          { required: true, message: this.$t("rules.require"), trigger: 'blur' },
+        ],
+        brand: [
+        	{ 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 {
+      	model: '',
+        name: '',
+        category: {
+          key: ''
+        },
+        materialType: {
+          key: ''
+        },
+        brand: {
+          key: ''
+        },
+        status: '1',
+        period:12,
+        expiryDate:12,
+        num: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 () {
+    	// 验证规格必填
+    	/*let flag = false
+      
+    	if(this.tableData.length > 0){
+    		this.tableData.map(item => {
+	    		if(!item.specification){
+	    			flag = true
+	    		}
+	    	})         
+      if(this.tenant.model ==''){         
+         flag = true 
+    	}else{
+        console.log(this.tenant.model)
+    		this.$message({
+	          message: this.$t("prepare.tips.addGg"),
+	          type: 'warning'
+	        })
+				return
+    	} */
+    	if(this.tenant.model ==''){
+        console.log(this.$t("prepare.tips.inputGg"))
+    		this.$message({
+	          message: this.$t("prepare.tips.inputGg"),
+	          type: 'warning'
+	        })
+				return
+    	}
+    	// 添加规格数据
+    	this.tenant.mtoolMeterialSpecsList = this.tableData
+    	//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)
+      frockMgrApi.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 () {
+      frockMgrApi.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
+    		}
+    	}*/
+    	frockMgrApi.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>

+ 214 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/frockMgr/components/View.vue

@@ -0,0 +1,214 @@
+<template>
+  <el-dialog
+    :title="$t(&quot;common.view&quot;)"
+    :width="width"
+    :append-to-body="true"
+    :visible.sync="isVisible"
+    class="tenant-view"
+  >
+    <el-row :gutter="10">
+      <el-col :xs="24" :sm="24">
+        <div class="img-wrapper">
+          <img :src="tenant.logo">
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :xs="24" :sm="12">
+        <div class="view-item">
+          <i class="el-icon-user" />
+          <span>{{ $t('table.tenant.code') +':' }}</span>
+          {{ tenant.code }}
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12">
+        <div class="view-item">
+          <i class="el-icon-suitcase" />
+          <span>{{ $t('table.tenant.name') +':' }}</span>
+          {{ tenant.name }}
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :xs="24" :sm="12">
+        <div class="view-item">
+          <i class="el-icon-trophy" />
+          <span>{{ $t('table.tenant.type') +':' }}</span>
+          {{ tenant.type.desc }}
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12">
+        <div class="view-item">
+          <i class="el-icon-phone-outline" />
+          <span>{{ $t('table.tenant.status') +':' }}</span>
+          {{ tenant.status.desc }}
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :xs="24" :sm="12">
+        <div class="view-item">
+          <i class="el-icon-star-off" />
+          <span>{{ $t('table.tenant.duty') +':' }}</span>
+          {{ tenant.duty }}
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12">
+        <div class="view-item">
+          <i class="el-icon-bangzhu" />
+          <span>{{ $t('table.tenant.expirationTime') +':' }}</span>
+          {{ tenant.expirationTime ? tenant.expirationTime : '永久' }}
+        </div>
+      </el-col>
+    </el-row>
+    <el-row :gutter="10">
+      <el-col :xs="24" :sm="12">
+        <div class="view-item">
+          <i class="el-icon-time" />
+          <span>{{ $t('table.createTime') +':' }}</span>
+          {{ tenant.createTime }}
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="12">
+        <div class="view-item">
+          <i class="el-icon-brush" />
+          <span>{{ $t('table.updateTime') +':' }}</span>
+          {{ tenant.updateTime }}
+        </div>
+      </el-col>
+    </el-row>
+    <!--    <el-row :gutter='10'>-->
+    <!--      <el-col :xs='24' :sm='12'>-->
+    <!--        <div class='view-item'>-->
+    <!--          <i class='el-icon-date' />-->
+    <!--          <span>{{ $t('table.tenant.isMultipleLogin') +':' }}</span>-->
+    <!--          {{ tenant.isMultipleLogin ? '是' : '否'}}-->
+    <!--        </div>-->
+    <!--      </el-col>-->
+    <!--      <el-col :xs='24' :sm='12'>-->
+    <!--        <div class='view-item'>-->
+    <!--          <i class='el-icon-document' />-->
+    <!--          <span>{{ $t('table.tenant.passwordExpire') +':' }}</span>-->
+    <!--          {{ tenant.passwordExpire == '0' ? '永久有效' :tenant.passwordExpire}}-->
+    <!--        </div>-->
+    <!--      </el-col>-->
+    <!--    </el-row>-->
+    <!--    <el-row :gutter='10'>-->
+    <!--      <el-col :xs='24' :sm='12'>-->
+    <!--        <div class='view-item'>-->
+    <!--          <i class='el-icon-document' />-->
+    <!--          <span>{{ $t('table.tenant.passwordErrorNum') +':' }}</span>-->
+    <!--          {{ tenant.passwordErrorNum}}-->
+    <!--        </div>-->
+    <!--      </el-col>-->
+    <!--      <el-col :xs='24' :sm='12'>-->
+    <!--        <div class='view-item'>-->
+    <!--          <i class='el-icon-date' />-->
+    <!--          <span>{{ $t('table.tenant.passwordErrorLockTime') +':' }}</span>-->
+    <!--          {{ tenant.passwordErrorLockTime | passwordErrorLockTimeFilter }}-->
+    <!--        </div>-->
+    <!--      </el-col>-->
+    <!--    </el-row>-->
+    <el-row :gutter="10">
+      <el-col :xs="24" :sm="24">
+        <div class="view-item">
+          <i class="el-icon-date" />
+          <span>{{ $t('table.tenant.describe') +':' }}</span>
+          {{ tenant.describe }}
+        </div>
+      </el-col>
+    </el-row>
+  </el-dialog>
+</template>
+<script>
+export default {
+  name: 'TenantView',
+  filters: {
+    passwordErrorLockTimeFilter (time) {
+      if (time === '0') {
+        return '当天23点59分'
+      }
+      return time
+    }
+  },
+  props: {
+    dialogVisible: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data () {
+    return {
+      screenWidth: 0,
+      width: this.initWidth(),
+      tenant: {
+        type: {
+          desc: ''
+        },
+        status: {
+          desc: ''
+        }
+      }
+    }
+  },
+  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')
+    }
+  }
+}
+</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>

+ 6 - 1
imcs-ui/src/views/zuihou/prepareProductMgr/toolsMaterial/Index.vue

@@ -78,7 +78,12 @@
       <el-table-column prop="no" :label='$t("prepare.table.tools.no")' :show-overflow-tooltip="true" width="100px"></el-table-column>
       <el-table-column prop="name" :label='$t("prepare.table.tools.name")' :show-overflow-tooltip="true" width="150px"></el-table-column>
       <el-table-column prop="model" :label='$t("prepare.table.tools.model")' :show-overflow-tooltip="true" width="150px"></el-table-column>
-      <el-table-column prop="specification" :label='$t("prepare.table.tools.specification")' :show-overflow-tooltip="true" width="250px"></el-table-column>
+	  
+	  <el-table-column prop="heatNo" :label='$t("prepare.table.tools.heatNo")' :show-overflow-tooltip="true" width="150px"></el-table-column>
+      <el-table-column prop="materialNo" :label='$t("prepare.table.tools.materialNo")' :show-overflow-tooltip="true" width="150px"></el-table-column>
+      <el-table-column prop="joinDate" :label='$t("prepare.table.tools.joinDate")' :show-overflow-tooltip="true" width="150px"></el-table-column>
+
+      <!--<el-table-column prop="specification" :label='$t("prepare.table.tools.specification")' :show-overflow-tooltip="true" width="250px"></el-table-column>-->
       <el-table-column prop="brand.data" :label='$t("prepare.table.tools.brand")' :show-overflow-tooltip="true" width="150px"></el-table-column>
       <el-table-column prop="category.data" :label='$t("prepare.table.tools.category")' :show-overflow-tooltip="true" width="150px"></el-table-column>
       <el-table-column prop="status" :label='$t("prepare.table.tools.status")' align="center" width="90px">

+ 26 - 7
imcs-ui/src/views/zuihou/prepareProductMgr/toolsMaterial/components/Edit.vue

@@ -30,7 +30,21 @@
       <el-form-item :label='$t("prepare.table.tools.model")+":"' prop="model">
         <el-input v-model="tenant.model" :placeholder='$t("common.pleaseEnter")'/>
       </el-form-item>
-      <el-form-item :label='$t("prepare.table.tools.specification")+":"'>
+      <el-form-item :label='$t("prepare.table.tools.heatNo")+":"' prop="heatNo">
+        <el-input v-model="tenant.heatNo" :placeholder='$t("common.pleaseEnter")'/>
+      </el-form-item>
+      <el-form-item :label='$t("prepare.table.tools.materialNo")+":"' prop="materialNo">
+        <el-input v-model="tenant.materialNo" :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='$t("prepare.table.tools.specification")+":"' v-show="false">
         <!-- 功能按钮 -->
 		    <el-row class="filter-container">
 		    	<el-col>
@@ -50,7 +64,7 @@
 		      <el-table-column prop="tradeMark" :label='$t("prepare.table.tools.tradeMark")' align="center" width="180px">
 		      	<template slot-scope="{ row }">
 		      		<el-input size="small" v-model="row.tradeMark" v-if="row.isEdit" :placeholder='$t("common.pleaseEnter")'></el-input>
-		      		<span v-else="">{{row.tradeMark}}</span>
+		      		<span v-else>{{row.tradeMark}}</span>
 		      	</template>
 		      </el-table-column>
 		      <!--<el-table-column prop="type" label="类型" width="120px">
@@ -69,7 +83,7 @@
 		      <el-table-column prop="specification" :label='$t("prepare.table.tools.specification")'>
 		      	<template slot-scope="{ row }">
 		      		<el-input size="small" v-model="row.specification" v-if="row.isEdit" :placeholder='$t("common.pleaseEnter")'></el-input>
-		      		<span v-else="">{{row.specification}}</span>
+		      		<span v-else>{{row.specification}}</span>
 		      	</template>
 		      </el-table-column>
 		      <el-table-column
@@ -269,21 +283,26 @@ export default {
     },
     submitForm () {
     	// 验证规格必填
-    	let flag = false
+    	/*let flag = false
+      
     	if(this.tableData.length > 0){
     		this.tableData.map(item => {
 	    		if(!item.specification){
 	    			flag = true
 	    		}
-	    	})
+	    	})         
+      if(this.tenant.model ==''){         
+         flag = true 
     	}else{
+        console.log(this.tenant.model)
     		this.$message({
 	          message: this.$t("prepare.tips.addGg"),
 	          type: 'warning'
 	        })
 				return
-    	}
-    	if(flag){
+    	} */
+    	if(this.tenant.model ==''){
+        console.log(this.$t("prepare.tips.inputGg"))
     		this.$message({
 	          message: this.$t("prepare.tips.inputGg"),
 	          type: 'warning'