فهرست منبع

工序损耗管理

su 1 سال پیش
والد
کامیت
8c61774f53
4فایلهای تغییر یافته به همراه260 افزوده شده و 81 حذف شده
  1. 46 1
      src/api/mes/job.js
  2. 51 31
      src/view/job/piece/piece.vue
  3. 139 34
      src/view/job/process/process.vue
  4. 24 15
      src/view/job/processSheet/processSheet.vue

+ 46 - 1
src/api/mes/job.js

@@ -102,4 +102,49 @@ export const getDocumentInfo = (data) => {
     method: 'post',
     data
   })
-}
+}
+
+export const getProcessCode = (params) => {
+  return service({
+    url: '/mes_server/process/getProcessCode',
+    method: 'get',
+    params
+  })
+}
+export const getProcessAdd = (data) => {
+  return service({
+    url: '/mes_server/process/add',
+    method: 'post',
+    data
+  })
+}
+
+export const getProcessEdit = (data) => {
+  return service({
+    url: '/mes_server/process/edit',
+    method: 'post',
+    data
+  })
+}
+export const getProcessDel = (data) => {
+  return service({
+    url: '/mes_server/process/delete',
+    method: 'post',
+    data
+  })
+}
+
+export const getPieceParams = (params) => {
+  return service({
+    url: '/mes_server/piece_work/getPieceParams',
+    method: 'get',
+    params
+  })
+}
+export const editAllParams = (data) => {
+  return service({
+    url: '/mes_server/piece_work/editAllParams',
+    method: 'post',
+    data
+  })
+}

+ 51 - 31
src/view/job/piece/piece.vue

@@ -9,8 +9,8 @@
       </el-aside>
       <el-container>
         <el-main>
-          <!-- <div class="gva-search-box">
-            <el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
+          <div class="gva-search-box">
+            <!-- <el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
               <el-form-item label="创建日期" prop="createdAt">
                 <template #label>
         <span>
@@ -28,43 +28,48 @@
                 <el-button type="primary" icon="search" @click="onSubmit">查询</el-button>
                 <el-button icon="refresh" @click="onReset">重置</el-button>
               </el-form-item>
-            </el-form>
-          </div> -->
-          <!-- <div class="gva-table-box">
-            <div class="gva-btn-list">
+            </el-form> -->
+			<div class="gva-btn-list">
+			  <el-button type="primary" icon="upload" @click="">定额参数批量修改excel</el-button>
+			  <el-button type="primary" icon="plus" @click="">更新</el-button>
+			</div>
+          </div>
+          <div class="gva-table-box">
+            <!-- <div class="gva-btn-list">
 			  <el-button type="primary" icon="upload" @click="">导出到excel</el-button>
 			  <el-button type="primary" icon="plus" @click="getDetails(2)">详情</el-button>
-            </div>
+            </div> -->
             <el-table
                 ref="multipleTable"
+            	border
                 style="width: 100%"
                 tooltip-effect="dark"
                 :data="tableData"
                 row-key="ID"
                 @selection-change="handleSelectionChange"
+            	@row-dblclick="updateCompanyFunc"
+            	:show-overflow-tooltip="true"
+            	highlight-current-row="true"
             >
-              <el-table-column align="left" label="设备编号" prop="address" width="120" />
-              <el-table-column align="left" label="设备名称" prop="image" width="120" />
-              <el-table-column align="left" label="生产工序" prop="name" width="120" />
-			  <el-table-column align="left" label="日定额" prop="address" width="120" />
-			  <el-table-column align="left" label="千件工价" prop="image" width="120" />
-			  <el-table-column align="left" label="机长" prop="name" width="120" />
-			  <el-table-column align="left" label="副机" prop="address" width="120" />
-			  <el-table-column align="left" label="调墨" prop="image" width="120" />
-			  <el-table-column align="left" label="二手" prop="name" width="120" />
-			  <el-table-column align="left" label="飞达" prop="address" width="120" />
-			  <el-table-column align="left" label="辅助" prop="image" width="120" />
-			  <el-table-column align="left" label="放卷" prop="name" width="120" />
-			  <el-table-column align="left" label="分切1" prop="address" width="120" />
-			  <el-table-column align="left" label="分切2" prop="image" width="120" />
-			  <el-table-column align="left" label="检验" prop="name" width="120" />
-			  <el-table-column align="left" label="使用部门" prop="address" width="120" />
-			  <el-table-column align="left" label="设备编组" prop="image" width="120" />
-			  <el-table-column align="left" label="创建用户" prop="name" width="120" />
-			  <el-table-column align="left" label="创建时间" prop="address" width="120" />
-			  <el-table-column align="left" label="修改时间" prop="image" width="120" />
-			  <el-table-column align="left" label="UNIQID" prop="name" width="120" >
+              <el-table-column align="left" label="定额代号" prop="address" width="90" />
+              <el-table-column align="left" label="名称备注" prop="image" width="90" />
+              <el-table-column align="left" label="使用工序" prop="name" width="90" />
+			  <el-table-column align="left" label="适用机型" prop="address" width="90" />
+			  <el-table-column align="left" label="原日定额" prop="image" width="90" />
+			  <el-table-column align="left" label="原千件工价" prop="name" width="100" />
+			  <el-table-column align="left" label="原补产标准" prop="address" width="100" />
+			  <el-table-column align="left" label="新日定额" prop="image" width="100" >
+			      <el-input v-model="formData.daily_quota" :clearable="true"/>
+			  </el-table-column>
+			  <el-table-column align="left" label="新千件工价" prop="name" width="100" >
+			      <el-input v-model="formData.thousand_piece" :clearable="true"/>
+			  </el-table-column>
+			  <el-table-column align="left" label="新补产标准" prop="address" width="100">
+				  <el-input v-model="formData.production_standard" :clearable="true"/>
               </el-table-column>
+			  <el-table-column align="left" v-if="false" label="新补产标准" prop="UniqId" width="100">
+			  	  <el-input v-model="formData.UniqId" :clearable="true"/>
+			  </el-table-column>
             </el-table>
             <div class="gva-pagination">
               <el-pagination
@@ -77,7 +82,7 @@
                   @size-change="handleSizeChange"
               />
             </div>
-          </div> -->
+          </div>
           <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="type==='create'?'添加':'修改'" destroy-on-close>
             <el-scrollbar height="500px">
               <el-form :model="formData" label-position="right" ref="elFormRef" :rules="rule" label-width="80px">
@@ -101,7 +106,7 @@
           </el-dialog>
 
           <el-dialog v-model="detailShow" style="width: 800px" lock-scroll :before-close="closeDetailShow" :title="`当前编码:${pieceData.sys_bh}`" destroy-on-close>
-            <el-scrollbar height="550px">
+            <el-scrollbar height="300px">
               <el-descriptions column="1" border>
                 <el-descriptions-item label="编号">
                   {{ pieceData.sys_bh }}
@@ -198,6 +203,9 @@ const PieceWork = async() => {
 	  
 	  const transformedData1 = getPieceWorks.data.machineData.map(item => ({
 	          label: `${item.sys_mc}【${item.sys_bh}】`,
+			  params: {
+			    code: item.sys_bh,
+			  },
 	          children: item.child.map(sysItem => ({
 	            label: `${sysItem.gx} ${sysItem.jx}【${sysItem.sys_bh}】`,
 	            params: {
@@ -213,6 +221,9 @@ const PieceWork = async() => {
 	        }));
 		const transformedData2 = getPieceWorks.data.handData.map(item => ({
 		        label: `${item.gx}【${item.sys_bh}】`,
+				params: {
+				  code: item.sys_bh,
+				},
 		        children: item.child.map(sysItem => ({
 		          label: `${sysItem.sys_mc}【${sysItem.sys_bh}】`,
 		          params: {
@@ -231,10 +242,12 @@ const PieceWork = async() => {
 	    	{
 	    		label: '机器作业计件定额',
 	    		children:transformedData1,
+				code:'020'
 	    	},
 			{
 				label: '人工作业计件定额',
 				children:transformedData2,
+				code:'030'
 			}
 	    ]
   }
@@ -260,7 +273,13 @@ const handleNodeClick = (node,check) => {
   		getDetails();
   	}
   }
-  console.log(node,check);
+  if(node.params){
+	  code.value=node.params.code
+  }else{
+	  code.value=node.code
+  }
+  console.log(node.code);
+  // console.log(node,check);
 }
 // 自动化生成的字典(可能为空)以及字段
 const formData = ref({
@@ -300,6 +319,7 @@ const pageSize = ref(10)
 const tableData = ref([])
 const searchInfo = ref({})
 const sys_bh = ref()
+const code = ref()
 const pieceData = ref([])
 
 // 重置

+ 139 - 34
src/view/job/process/process.vue

@@ -4,13 +4,14 @@
       <el-aside width="320px">
         <div class="JKWTree-tree">
           <h3>工序损耗管理</h3>
-          <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
+          <!-- <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick"></el-tree> -->
+		  <el-tree :data="treeData" @node-click="handleNodeClick"></el-tree>
         </div>
       </el-aside>
       <el-container>
         <el-main>
-          <!-- <div class="gva-search-box">
-            <el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
+          <div class="gva-search-box">
+            <!-- <el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
               <el-form-item label="创建日期" prop="createdAt">
                 <template #label>
         <span>
@@ -28,8 +29,15 @@
                 <el-button type="primary" icon="search" @click="onSubmit">查询</el-button>
                 <el-button icon="refresh" @click="onReset">重置</el-button>
               </el-form-item>
-            </el-form>
-          </div> -->
+            </el-form> -->
+			<div class="gva-btn-list">
+				<el-button type="primary" icon="upload" @click="addNextClick">增加同级科目</el-button>
+				<el-button type="primary" icon="plus" @click="editClick">修改</el-button>
+				<el-button type="primary" icon="upload" @click="delClick">删除</el-button>
+				<el-button type="primary" icon="plus" @click="addChildClick">增加子科目</el-button>
+			    <!-- <el-button type="primary" icon="upload" @click="importClick">导出到excel</el-button> -->
+			</div>
+          </div>
           <!-- <div class="gva-table-box">
             <div class="gva-btn-list">
 			  <el-button type="primary" icon="upload" @click="">导出到excel</el-button>
@@ -78,18 +86,24 @@
               />
             </div>
           </div> -->
-          <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="type==='create'?'添加':'修改'" destroy-on-close>
-            <el-scrollbar height="500px">
-              <el-form :model="formData" label-position="right" ref="elFormRef" :rules="rule" label-width="80px">
-                <el-form-item label="address字段:"  prop="address" >
-                  <el-input v-model="formData.address" :clearable="true"  placeholder="请输入address字段" />
+          <el-dialog v-model="dialogFormVisible" style="width: 600px;" :before-close="closeDialog" :title="`当前编码:${code}`" destroy-on-close>
+            <el-scrollbar height="200px">
+              <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule" label-width="80px">
+                <el-form-item label="编号:"  prop="code" >
+                  <el-input v-model="formData.code" style="width: 400px;" :clearable="true"/>
                 </el-form-item>
-                <el-form-item label="image字段:"  prop="image" >
-                  <el-input v-model="formData.image" :clearable="true"  placeholder="请输入image字段" />
+                <el-form-item label="名称:"  prop="name" >
+                  <el-input v-model="formData.name" style="width: 400px;" :clearable="true"/>
                 </el-form-item>
-                <el-form-item label="name字段:"  prop="name" >
-                  <el-input v-model="formData.name" :clearable="true"  placeholder="请输入name字段" />
+                <el-form-item label="基本损耗:"  prop="sys_rate0" >
+                  <el-input v-model="formData.sys_rate0" style="width: 145px;" :clearable="true"/>
                 </el-form-item>
+				<el-form-item label="损耗率:"  prop="sys_rate1" >
+				  <el-input v-model="formData.sys_rate1" style="width: 145px;" :clearable="true"/>
+				</el-form-item>
+				<el-form-item label="备注机型:"  prop="remark" >
+				  <el-input v-model="formData.remark" style="width: 400px;" :clearable="true"/>
+				</el-form-item>
               </el-form>
             </el-scrollbar>
             <template #footer>
@@ -100,8 +114,8 @@
             </template>
           </el-dialog>
 
-          <el-dialog v-model="detailShow" style="width: 800px" lock-scroll :before-close="closeDetailShow" :title="`当前编码:${processData.sys_bh}`" destroy-on-close>
-            <el-scrollbar height="550px">
+          <el-dialog v-model="detailShow" style="width: 600px" lock-scroll :before-close="closeDetailShow" :title="`当前编码:${processData.sys_bh}`" destroy-on-close>
+            <el-scrollbar height="200px">
               <el-descriptions column="1" border>
                 <el-descriptions-item label="编号">
                   {{ processData.sys_bh }}
@@ -152,7 +166,11 @@
 <script setup>
 import {
   getProcessLoss,
-  getProcess
+  getProcess,
+  getProcessCode,
+  getProcessAdd,
+  getProcessEdit,
+  getProcessDel
 } from '@/api/mes/job'
 import {
   createCompany,
@@ -175,11 +193,14 @@ defineOptions({
 const treeData=ref([])
 const Process = async() => {
   const getProcesss = await getProcess()
-  console.log(getProcesss.data)
+  // console.log(getProcesss.data)
   if (getProcesss.code === 0) {
 	  
 	  const transformedData = getProcesss.data.map(item => ({
 	          label: item.sys_mc,
+			  params: {
+			    code: item.sys_bh,
+			  },
 	          children: item.child.map(sysItem => ({
 	            label: sysItem.sys_mc,
 	            params: {
@@ -201,7 +222,7 @@ const Process = async() => {
 	  				}))
 	          })),
 	        }));
-	  console.log(transformedData)
+	  // console.log(transformedData)
     treeData.value = transformedData
   }
 }
@@ -235,13 +256,17 @@ const handleNodeClick = async(node,check) => {
 	// 		sys_bh.value = node.params.code;
 	// 		getDetails();
 	// 	}
-     console.log(node,check);
+	code.value=node.params.code
+	// console.log(code.value);
+     // console.log(node,check);
 }
 // 自动化生成的字典(可能为空)以及字段
 const formData = ref({
-        address: '',
-        image: '',
+        code: '',
         name: '',
+        sys_rate0: 0.000,
+		sys_rate1: 0.0000,
+		remark: '',
         })
 
 const processData = ref({})
@@ -279,7 +304,77 @@ const searchInfo = ref({})
 //   label: 'sys_mc'
 // };
 const sys_bh = ref()
+const code = ref()
+const newcode = ref()
+const addNextClick = async() => {
+	if(code.value==undefined){
+		return false;
+	}
+  const getProcessCodes = await getProcessCode({code:code.value,same_item:1,child_item:0})
+  if (getProcessCodes.code === 0) {
+	  if(getProcessCodes.data.length<=3){
+		  switch(getProcessCodes.data.length){
+			  case 1:newcode.value=`00${getProcessCodes.data}`
+			  break;
+			  case 2:newcode.value=`0${getProcessCodes.data}`
+			  break
+		  }
+	  }else{
+		  newcode.value=getProcessCodes.data
+	  }
+	  formData.value.code=newcode.value
+	  openDialog()
+	  // console.log(newcode.value)
+  }
+}
 
+const addChildClick = async() => {
+	if(code.value==undefined){
+		return false;
+	}
+  const getProcessCodes = await getProcessCode({code:code.value,same_item:0,child_item:1})
+  if (getProcessCodes.code === 0) {
+	  formData.value.code=getProcessCodes.data
+	  openDialog()
+	  // console.log(newcode.value)
+  }
+}
+const editClick = async() => {
+	const ProcessDetail = await getProcessLoss({code:code.value})
+	// console.log(ProcessDetail)
+	if (ProcessDetail.code === 0) {
+	    formData.value.code=ProcessDetail.data[0].sys_bh
+	    formData.value.name=ProcessDetail.data[0].sys_mc
+	    formData.value.sys_rate0=ProcessDetail.data[0].sys_rate0
+	    formData.value.sys_rate1=ProcessDetail.data[0].sys_rate1
+	    formData.value.remark=ProcessDetail.data[0].remark
+	}
+	type.value = 'update'
+	dialogFormVisible.value = true
+	
+	  // console.log(newcode.value)
+}
+const delClick = async() => {
+	ElMessageBox.confirm('确定要删除吗?', '提示', {
+	    confirmButtonText: '确定',
+	    cancelButtonText: '取消',
+	    type: 'warning'
+	}).then(() => {
+		ProcessDel()
+	    })
+}
+const ProcessDel = async() => {
+  const getProcessDels = await getProcessDel({ code: code.value })
+  if (getProcessDels.code === 0) {
+	  ElMessage({
+	          type: 'success',
+	          message: '删除成功'
+	      })
+	  Process()
+	  // delRes.value=1
+	  // console.log(delRes.value)
+  }
+}
 // 重置
 const onReset = () => {
   searchInfo.value = {}
@@ -441,7 +536,12 @@ const getDetails = async () => {
 	  // getProcessLosss.data[0].forEach(function(i,index){
 	  // 	console.log(i)
 	  // })
-	  processData.value=getProcessLosss.data[0]
+	  processData.value=getProcessLosss.data[0];
+	  // formData.value.code=getProcessLosss.data[0].sys_bh
+	  // formData.value.name=getProcessLosss.data[0].sys_mc
+	  // formData.value.sys_rate0=getProcessLosss.data[0].sys_rate0
+	  // formData.value.sys_rate1=getProcessLosss.data[0].sys_rate1
+	  // formData.value.remark=getProcessLosss.data[0].remark
 	  openDetailShow()
 	}
 }
@@ -450,16 +550,18 @@ const getDetails = async () => {
 const closeDetailShow = () => {
   detailShow.value = false
   formData.value = {
-          address: '',
-          image: '',
-          name: '',
-          }
+        code: '',
+        name: '',
+        sys_rate0: 0.000,
+		sys_rate1: 0.0000,
+		remark: '',
+        }
 }
 
 
 // 打开弹窗
 const openDialog = () => {
-    // type.value = 'create'
+    type.value = 'create'
     dialogFormVisible.value = true
 }
 
@@ -467,9 +569,11 @@ const openDialog = () => {
 const closeDialog = () => {
     dialogFormVisible.value = false
     formData.value = {
-        address: '',
-        image: '',
+        code: '',
         name: '',
+        sys_rate0: 0.000,
+		sys_rate1: 0.0000,
+		remark: '',
         }
 }
 // 弹窗确定
@@ -479,13 +583,13 @@ const enterDialog = async () => {
               let res
               switch (type.value) {
                 case 'create':
-                  res = await createCompany(formData.value)
+                  res = await getProcessAdd(formData.value)
                   break
                 case 'update':
-                  res = await updateCompany(formData.value)
+                  res = await getProcessEdit(formData.value)
                   break
                 default:
-                  res = await createCompany(formData.value)
+                  res = await getProcessAdd(formData.value)
                   break
               }
               if (res.code === 0) {
@@ -494,7 +598,8 @@ const enterDialog = async () => {
                   message: '创建/更改成功'
                 })
                 closeDialog()
-                getTableData()
+				Process()
+                // getTableData()
               }
       })
 }

+ 24 - 15
src/view/job/processSheet/processSheet.vue

@@ -121,15 +121,15 @@
 		maobao:'',
 		mabao:'',
 		peijian:'',
-		tldx:'',
+		tldx:3000,
 		num:'',
 		liucheng_total:'',
 		version:'',
-		start_liucheng:'',
-		liucheng_num:'',
+		start_liucheng:1,
+		liucheng_num:1,
 		remark:'',
-		x_offset:'',
-		y_offset:''
+		x_offset:0,
+		y_offset:0
 	})
 	const department = ref()
 	const update = ref()
@@ -144,17 +144,26 @@
 		  const getDocumentDatas = await getDocumentData({order:workData.value.Gd_gdbh})
 		  if (getDocumentDatas.code === 0) {
 			  workData.value.version=getDocumentDatas.data.paper[0].产品版本号;
-			  const getHistory = async() => {
-			    const getDocumentHistorys = await getDocumentHistory({order:2109722,peijian:0})
-			    if (getDocumentHistorys.code === 0) {
-					department.value=getDocumentHistorys.data.department
-					update.value=getDocumentHistorys.data.update
-					gyData.value=getDocumentHistorys.data.data.map((item)=>({
-						gy:item
-					}))			  	  
-			    }
+			  if(getDocumentDatas.data.num>1){
+				  
+			  }else{
+				  
 			  }
-			  getHistory()
+			  workData.value.num=getDocumentDatas.data.paper[0].bom_计划用量;
+			  if(getDocumentDatas.data.peijian){
+				  const getHistory = async() => {
+				    const getDocumentHistorys = await getDocumentHistory({order:2109722,peijian:0})
+				    if (getDocumentHistorys.code === 0) {
+				  					department.value=getDocumentHistorys.data.department
+				  					update.value=getDocumentHistorys.data.update
+				  					gyData.value=getDocumentHistorys.data.data.map((item)=>({
+				  						gy:item
+				  					}))			  	  
+				    }
+				  }
+				  getHistory()
+			  }
+			  
 		  }
 		}
 		getDocument()