Browse Source

fix:bom加版本,料箱等级和物料关联

lupeng 1 year ago
parent
commit
3cd8abd3fc

+ 28 - 1
src/api/fault/index.ts

@@ -1,6 +1,6 @@
 import request from "@/utils/request";
 import { AxiosPromise } from "axios";
-import {Fault} from "@/api/fault/types";
+import {Fault, FaultHandle} from "@/api/fault/types";
 
 
 /**
@@ -28,5 +28,32 @@ export function getFaultDetails(id: Number): AxiosPromise<any> {
     method: "get",
   });
 }
+/**
+ * 处理结果
+ *
+ * @param id
+ * @param data
+ */
+export function handleEscalationFault(data: FaultHandle): AxiosPromise<any> {
+  return request({
+    url: "/api/v1/process/escalationFault/handle",
+    method: "post",
+    data: data,
+  });
+}
+
+  /**
+   * 处理结果
+   *
+   * @param id
+   * @param data
+   */
+  export function getSeqNoList(data:Fault): AxiosPromise<any> {
+    return request({
+      url: "/api/v1/process/escalationItem/list" ,
+      method: "post",
+      data: data,
+    });
+}
 
 

+ 11 - 0
src/api/fault/types.ts

@@ -1,3 +1,14 @@
+/**
+ * 报故id
+ */
 export interface Fault {
   escalationFaultId?: number;
 }
+/**
+ * 报故处理
+ */
+export interface FaultHandle {
+  id?: number;
+  disposalMeasures?:String;
+  trackingNumber?:String;
+}

+ 80 - 9
src/views/quality/faultHandle/components/fault-handle.vue

@@ -47,13 +47,35 @@
     <div class="title-fault" style="margin-top: 10px">
       报故工位:&nbsp;&nbsp;{{faultDetails.stationName}}
     </div>
-    <div class="title-fault" style="margin-top: 10px">
+    <div class="title-fault" style="margin-top: 10px;margin-bottom: 10px">
       报故数量:&nbsp;&nbsp;{{faultDetails.unqualifiedNum}}
     </div>
-    <div class="title-fault" style="margin-top: 10px">
+    <div class="title-fault" style="margin-top: 10px;margin-bottom: 10px" v-if="faultDetails.disposalMeasures!=='0'">
       处理结果:&nbsp;&nbsp;{{faultDetails.disposalMeasures}}
     </div>
   </div>
+  <avue-form
+    ref="formRef"
+    v-model="form"
+    :option="option2"
+  >
+  </avue-form>
+  <div class="fault" v-if="faultDetails!=null">
+
+
+
+    <el-radio-group v-model="radio1" size="large">
+      <el-radio-button label="维修" value="repair" />
+      <el-radio-button label="报废" value="scrapped" />
+    </el-radio-group>
+  </div>
+  <div style="overflow: hidden">
+  <div class="detail-footer">
+    <el-button type="primary" @click="onHandle"> 确定 </el-button>
+    <el-button @click="cancelWindow">取消</el-button>
+
+  </div>
+  </div>
 </template>
 <script setup>
   import { ref, getCurrentInstance } from "vue";
@@ -61,7 +83,7 @@
   import ButtonPermKeys from "@/common/configs/buttonPermission";
   import { useCommonStoreHook, useDictionaryStoreHook } from "@/store";
   const { isShowTable, tableType } = toRefs(useCommonStoreHook());
-  import {getFault,getFaultDetails} from "@/api/fault"
+  import {getFault,getFaultDetails,handleEscalationFault} from "@/api/fault"
   import dictDataUtil from "@/common/configs/dictDataUtil";
   // 数据字典相关
   const { dicts } = useDictionaryStoreHook();
@@ -72,12 +94,12 @@
   };
   const props = defineProps({
     escalationId: {
-      type: Number,
+      type: String,
       default: () => {
         return 0;
       }
     },
-    dialog1:{
+    dia:{
       type:Object,
       default:()=>{
         return {};
@@ -100,7 +122,7 @@
   //   editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
   //   menu: true,
   // });
-
+  const radio1=ref('repair');
   const crudRef = ref(null); //crudRef.value 获取avue-crud对象
   const router = useRouter();
 
@@ -109,14 +131,12 @@
   const faultDetails=ref(null);
   onMounted(() => {
     // console.log("crudRef", crudRef)
-
     search.value.escalationFaultId=props.escalationId;
     dataNoPageList();
     formData.value.escalationFaultId=props.escalationId;
     getFault(formData).then((data) => {
 
       faultImg.value=data.data;
-      console.info(faultImg.value);
     });
     getFaultDetails(props.escalationId).then((data) => {
 
@@ -130,8 +150,28 @@
 
   });
 
+const faultHandle=ref({});
+ const onHandle=()=>{
+   faultHandle.value.id=faultDetails.value.id;
+   faultHandle.value.disposalMeasures=radio1.value;
+   faultHandle.value.trackingNumber=form.value.trackingNumber;
+   handleEscalationFault(faultHandle.value).then((data)=>{
+     if(data.code==="200") {
+       ElMessage({
+         message: data.msg,
+         type: "success",
+       });
+       props.dia.visible=false;
+     }
+     else {
+       ElMessage({
+         message: data.msg,
+         type: "error",
+       });
+     }
+   });
 
-
+ }
 
   // 设置表格列或者其他自定义的option
   option.value = Object.assign(option.value, {
@@ -153,7 +193,34 @@
       },
     ],
   });
+  const option2=ref(null);
+  // 设置表格列或者其他自定义的option
+  option2.value = {
+    addBtn: false,
+    editBtn:false,
+    delBtn:false,
+    viewBtn:false,
+    submitBtn:false,
+    emptyBtn:false,
+    menu:false,
+    column: [
+      {
+        label: "不合格审理单号",
+        prop: "trackingNumber",
+        labelWidth:130,
+        rules: [{
+          required: true,
+          message: "请输入不合格审理单号",
+          trigger: "blur"
+        }],
+      },
 
+    ],
+  };
+  const cancelWindow=()=>{
+    console.info(props);
+    props.dia.visible=false;
+  }
 
 </script>
 <style>
@@ -182,4 +249,8 @@
   .fault-detail{
     margin-top: 20px;
   }
+  .detail-footer{
+    float: right;
+    overflow: hidden;
+  }
 </style>

+ 267 - 0
src/views/quality/faultHandle/components/fault-page.vue

@@ -0,0 +1,267 @@
+<template>
+  <div class="fault" v-if="faultDetails!=null">
+    <div class="title-fault" >
+      产品名称:&nbsp;&nbsp;{{faultDetails.materialName}}
+    </div>
+    <div class="title-fault">
+      产品编码:&nbsp;&nbsp;{{faultDetails.materialCode}}
+    </div>
+  </div>
+  <div class="mainContentBox">
+
+    <avue-crud
+      ref="crudRef"
+      v-model:search="search"
+      v-model="form"
+      :data="data"
+      :option="option"
+      v-model:page="page"
+      @row-save="createRow"
+      @row-update="updateRow"
+      @row-del="deleteRow"
+      @search-change="searchChange"
+      @search-reset="resetChange"
+      @selection-change="selectionChange"
+    >
+
+
+
+    </avue-crud>
+
+  </div>
+  <div class="fault">
+    <div class="image-title">图片</div>
+      <div v-for="(image, index) in faultImg" :key="index" class="fault-image">
+        <!-- 使用v-for循环渲染图片列表 -->
+        <img :src="dictDataUtil.img_url+image.fileUrl" alt="图片" width="150px" class="fault-img">
+      </div>
+
+  </div>
+  <div class="fault" v-if="faultDetails!=null">
+    <div class="fault-detail" >序列号:&nbsp;&nbsp;{{faultDetails.seqNo}}</div>
+    <div class="fault-detail">故障描述:&nbsp;&nbsp;{{faultDetails.remark}}</div>
+
+    <div class="title-fault" style="margin-top: 10px">
+      报故人:&nbsp;&nbsp;{{faultDetails.creator}}
+    </div>
+    <div class="title-fault" style="margin-top: 10px">
+      报故工位:&nbsp;&nbsp;{{faultDetails.stationName}}
+    </div>
+    <div class="title-fault" style="margin-top: 10px;margin-bottom: 10px">
+      报故数量:&nbsp;&nbsp;{{faultDetails.unqualifiedNum}}
+    </div>
+    <div class="title-fault" style="margin-top: 10px;margin-bottom: 10px" v-if="faultDetails.disposalMeasures!=='0'">
+      处理结果:&nbsp;&nbsp;{{faultDetails.disposalMeasures}}
+    </div>
+  </div>
+  <div class="mainContentBox">
+    <avue-crud
+      ref="formRef"
+      v-model="form"
+      :data="data2"
+      :option="option2"
+    >
+    </avue-crud>
+  </div>
+  <div style="overflow: hidden">
+  <div class="detail-footer">
+    <el-button type="primary" @click="onHandle"> 确定 </el-button>
+    <el-button @click="cancelWindow">取消</el-button>
+
+  </div>
+  </div>
+</template>
+<script setup>
+  import { ref, getCurrentInstance } from "vue";
+  import { useCrud } from "@/hooks/userCrud";
+  import ButtonPermKeys from "@/common/configs/buttonPermission";
+  import { useCommonStoreHook, useDictionaryStoreHook } from "@/store";
+  const { isShowTable, tableType } = toRefs(useCommonStoreHook());
+  import {getFault,getFaultDetails,getSeqNoList} from "@/api/fault"
+  import dictDataUtil from "@/common/configs/dictDataUtil";
+  // 数据字典相关
+  const { dicts } = useDictionaryStoreHook();
+
+  const test = () => {
+    isShowTable.value = true;
+    tableType.value = tableType.value == 1 ? 2 : 1;
+  };
+  const props = defineProps({
+    faultId: {
+      type: String,
+      default: () => {
+        return 0;
+      }
+    },
+    dial:{
+      type:Object,
+      default:()=>{
+        return {};
+      }
+    }
+  })
+  // 传入一个url,后面不带/
+  const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
+    useCrud({
+      src: "/api/v1/process/escalationDefects",
+    });
+  const { dataNoPageList, createRow, updateRow, deleteRow, searchChange, resetChange } =
+    Methords; //增删改查
+  const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
+  const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
+  // checkBtnPerm(ButtonPermKeys.PLAN.BTNS.order_add) :permission="permission"
+  // const permission = reactive({
+  //   delBtn: checkPerm(buttonPermission.PLAN.BTNS.order_del),
+  //   addBtn: checkPerm(buttonPermission.PLAN.BTNS.order_add),
+  //   editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
+  //   menu: true,
+  // });
+  const radio1=ref('repair');
+  const crudRef = ref(null); //crudRef.value 获取avue-crud对象
+  const router = useRouter();
+  const formRef=ref(null);
+  const data2=ref([]);
+  const faultImg=ref(null);
+  const formData=ref({});
+  const formFault=ref({});
+  const faultDetails=ref(null);
+  onMounted(() => {
+    // console.log("crudRef", crudRef)
+    search.value.escalationFaultId=props.faultId;
+    dataNoPageList();
+    formData.value.escalationFaultId=props.faultId;
+    formFault.value.escalationFaultId=props.faultId;
+    getFault(formData).then((data) => {
+
+      faultImg.value=data.data;
+    });
+    getFaultDetails(props.faultId).then((data) => {
+
+      faultDetails.value=data.data;
+      for(let i=0;i<dicts.disposal_measures_type.length;i++){
+        if(faultDetails.value.disposalMeasures===dicts.disposal_measures_type[i].dictValue){
+          faultDetails.value.disposalMeasures=dicts.disposal_measures_type[i].dictLabel;
+        }
+      }
+    });
+    getSeqNoList(formFault.value).then((data) => {
+
+      data2.value=data.data;
+      for(let i=0;i<data2.value.length;i++){
+        data2.value[i].$cellEdit=true;
+        console.info(data2);
+      }
+    });
+
+  });
+
+const faultHandle=ref({});
+ const onHandle=()=>{
+   faultHandle.value.id=faultDetails.value.id;
+   faultHandle.value.disposalMeasures=radio1.value;
+   faultHandle.value.trackingNumber=form.value.trackingNumber;
+   /*handleEscalationFault(faultHandle.value).then((data)=>{
+     if(data.code==="200") {
+       ElMessage({
+         message: data.msg,
+         type: "success",
+       });
+       props.dia.visible=false;
+     }
+     else {
+       ElMessage({
+         message: data.msg,
+         type: "error",
+       });
+     }
+   });*/
+
+ }
+
+  // 设置表格列或者其他自定义的option
+  option.value = Object.assign(option.value, {
+    addBtn: false,
+    editBtn:false,
+    delBtn:false,
+    viewBtn:false,
+    menu:false,
+    column: [
+      {
+        label: "缺陷大类",
+        prop: "bugType",
+        dicData:dicts.defect_mana,
+        props: { label: "dictLabel", value: "dictValue" },
+      },
+      {
+        label: "缺陷小类",
+        prop: "bugName",
+      },
+    ],
+  });
+  const option2=ref(null);
+  // 设置表格列或者其他自定义的option
+  option2.value = {
+    addBtn: false,
+    editBtn:false,
+    delBtn:false,
+    viewBtn:false,
+    submitBtn:false,
+    emptyBtn:false,
+    menu:false,
+    column: [
+      {
+        label: "跟踪卡号",
+        prop: "seqNo",
+        labelWidth:130,
+
+      },
+      {
+        label: "返工工序",
+        prop: "optionId",
+        labelWidth:130,
+        type:"select",
+        dicUrl: import.meta.env.VITE_APP_BASE_API+`/api/v1/process/info/list?seqNo={{seqNo}}`,
+        slot:true,
+        cell: true,
+
+      },
+
+    ],
+  };
+  const cancelWindow=()=>{
+    console.info(props);
+    props.dia.visible=false;
+  }
+
+</script>
+<style>
+  .title-fault{
+    float: left;
+    width: 300px;
+  }
+  .fault{
+    margin-left: 15px;
+    margin-top: 10px;
+    display: block;
+    overflow: hidden;
+  }
+  .fault-image{
+    width: 150px;
+    float: left;
+    margin-left: 10px;
+    overflow: hidden;
+  }
+  .image-title{
+    margin-bottom: 15px;
+  }
+  .fault-img{
+    display: inline-block;
+  }
+  .fault-detail{
+    margin-top: 20px;
+  }
+  .detail-footer{
+    float: right;
+    overflow: hidden;
+  }
+</style>

+ 38 - 15
src/views/quality/faultHandle/index.vue

@@ -30,11 +30,19 @@
                    text
                    type="primary"
         >查看</el-button>
-        <el-button @click="faultHandle(row)"
+        <el-button @click="faultEdit(row)"
                    icon="el-icon-link"
                    text
                    type="primary"
+                   v-if="row.currentState==1"
         >处理</el-button>
+
+        <el-button @click="faultThaw(row)"
+                   icon="el-icon-link"
+                   text
+                   type="primary"
+
+        >解冻</el-button>
       </template>
 
 
@@ -46,10 +54,7 @@
       width="900px"
       @close="dialog.visible = false"
     >
-
-        <fault-detail  :escalationFaultId="fault.id" :dialog="dialog"/>
-
-
+      <fault-detail  :escalationFaultId="fault.id" :dialog="dialog" />
     </el-dialog>
 
     <el-dialog
@@ -58,7 +63,16 @@
       width="900px"
       @close="dialog1.visible = false"
     >
-      <fault-handle  :escalationId="faultDetail.id" :dialog1="dialog1"/>
+      <fault-handle  :escalationId="faultInfo.id" :dia="dialog1" />
+    </el-dialog>
+
+    <el-dialog
+      v-model="dialog2.visible"
+      :title="dialog2.title"
+      width="900px"
+      @close="dialog2.visible = false"
+    >
+      <fault-page  :faultId="faultEs.id" :dial="dialog2" />
     </el-dialog>
   </div>
 </template>
@@ -76,23 +90,31 @@
     isShowTable.value = true;
     tableType.value = tableType.value == 1 ? 2 : 1;
   };
-  const dialog = reactive({
+  const dialog = ref({
     title: "报故详情",
     visible: false,
   });
-  const dialog1 = reactive({
+  const dialog1 = ref({
     title: "报故处理",
     visible: false,
   });
-
+  const dialog2 = ref({
+    title: "解冻",
+    visible: false,
+  });
 
   const fault=ref({});
-  const faultDetail=ref({});
-  const faultHandle=(row)=>{
+  const faultInfo=ref({});
+  const faultEs=ref({});
+  const faultEdit=(row)=>{
 
-    faultDetail.value=row;
+    faultInfo.value.id=row.id;
 
-    dialog1.visible=true;
+    dialog1.value.visible=true;
+  }
+  const faultThaw=(row)=>{
+    faultEs.value.id=row.id;
+    dialog2.value.visible=true;
   }
   // 传入一个url,后面不带/
   const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
@@ -115,8 +137,9 @@
   const router = useRouter();
   const viewFault = (row) => {
 
-    fault.value=row;;
-    dialog.visible=true;
+    fault.value.id=row.id;
+    console.info(fault)
+    dialog.value.visible=true;
   };
   onMounted(() => {
     // console.log("crudRef", crudRef)