浏览代码

bug修改

zhangqing 1 年之前
父节点
当前提交
aa896245ca

+ 199 - 0
src/components/common/seekPage.vue

@@ -0,0 +1,199 @@
+<template>
+    <div class="index_box">
+        <el-form label-width="90px" :inline="true">
+            <el-form-item v-for="(item, i) in seekList" :key="i">
+                <el-form-item :label="item.label" :label-width="item.labelWidth + 'px'" v-if="i <= 2">
+                    <!-- input 输入 -->
+                    <div>
+                        <div v-if="item.type == 'input'">
+
+                            <el-input clearable v-model="defaultWhere[item.value]"
+                                :placeholder="item.placeholder || '请输入内容'"
+                                :style="{ width: item.width ? item.width + 'px' : '220px' }" />
+                        </div>
+                        <div v-if="item.type == 'select'">
+                            <el-select clearable :v-model="defaultWhere[item.value]"
+                                :placeholder="item.placeholder || '请输入内容'" :multiple="item.multiple ? item.multiple : false"
+                                :filterable="item.filterable ? item.filterable : true"
+                                :style="{ width: item.width ? item.width + 'px' : '220px' }">
+                                <el-option v-for="(op, i) in item.planList" :label="op.label" :value="op.value"
+                                    :key="i"></el-option>
+                            </el-select>
+                        </div>
+                        <div v-if="item.type == 'date'">
+                            <el-date-picker v-model="defaultWhere[item.value]" @visible-change="change"
+                                :type="item.dateType || 'daterange'" range-separator="至" start-placeholder="开始日期"
+                                end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss"
+                                :style="{ width: item.width ? item.width + 'px' : '220px' }">
+
+
+                            </el-date-picker>
+                        </div>
+                    </div>
+                </el-form-item>
+
+            </el-form-item>
+
+            <el-form-item>
+                <el-dropdown ref="dropdownref" trigger="click" :hide-on-click="false" v-model="dropdownVisible">
+                    <div v-if="seekList.length > 3">
+                        <span class="el-dropdown-link">
+                            更多选项<i class="el-icon-arrow-down el-icon--right"></i>
+                        </span>
+                        <el-dropdown-menu slot="dropdown" >
+                            <div class="padding">
+                                <el-form label-position="left">
+                                    <el-form-item v-for="(item, i) in deboListRow" :key="i" :inline="true"
+                                        label-position="left">
+                                        <el-form-item :label-width="item.labelWidth ? item.labelWidth : '90' + 'px'"
+                                            :inline="true" :label="item.label">
+                                            <div v-if="item.type == 'input'">
+                                                <el-input clearable v-model="defaultWhere[item.value]"
+                                                    :placeholder="item.placeholder || '请输入内容'"
+                                                    :style="{ width: item.width ? item.width + 'px' : '220px' }" />
+                                            </div>
+                                            <div v-if="item.type == 'select'">
+                                                <el-select clearable v-model="defaultWhere[item.value]"
+                                                    :multiple="item.multiple ? item.multiple : false"
+                                                    :filterable="item.filterable ? item.filterable : true"
+                                                    :placeholder="item.placeholder || '请输入内容'"
+                                                    :style="{ width: item.width ? item.width + 'px' : '220px' }"
+                                                    @visible-change="change" @change="handerChange">
+                                                    <el-option v-for="(op, i) in item.planList" :label="op.label"
+                                                        :value="op.value" :key="i"></el-option>
+                                                </el-select>
+                                            </div>
+
+                                            <div v-if="item.type == 'date'">
+                                                <el-date-picker v-model="defaultWhere[item.value]"
+                                                    @blur="change" :type="item.dateType || 'daterange'"
+                                                    range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
+                                                    value-format="yyyy-MM-dd HH:mm:ss"
+                                                    
+                                                    :style="{ width: item.width ? item.width + 'px' : '220px' }">
+
+
+                                                </el-date-picker>
+                                            </div>
+
+                                        </el-form-item>
+                                    </el-form-item>
+                                </el-form>
+                            </div>
+
+                        </el-dropdown-menu>
+                    </div>
+                </el-dropdown>
+
+
+            </el-form-item>
+
+            <el-form-item>
+                <el-button type="primary" icon="el-icon-search" class="ele-btn-icon" @click="search">
+                    查询
+                </el-button>
+                <el-button @click="reset" icon="el-icon-refresh-left" type="primary">重置</el-button>
+            </el-form-item>
+        </el-form>
+
+
+    </div>
+</template>
+
+<script>
+
+let defaultWhere = {};
+export default {
+    props: {
+        seekList: {
+            type: Array,
+            default: () => []
+        }
+    },
+
+    components: {
+
+    },
+    watch: {
+        seekList: {
+            handler(val) {
+
+                val.forEach(item => {
+
+                    defaultWhere[item.value] = null;
+
+                })
+
+                this.$nextTick(() => {
+
+                    if (Array.isArray(val) && val.length <= 3) {
+                        this.seekListRow = val
+                    } else if (Array.isArray(val) && val.length >= 3) {
+                        this.seekListRow = val.slice(0, 3);
+                        this.deboListRow = val.slice(3);
+                    }
+                })
+
+            },
+            deep: true,
+            immediate: true,
+        }
+    },
+
+    data() {
+
+
+        return {
+            defaultWhere: {},
+            dropdownVisible: true,
+
+            deboListRow: [],
+            seekListRow: []
+        }
+    },
+
+    computed: {
+        info() {
+            return this.$store.state.user.info;
+        },
+
+    },
+
+    created() {
+
+
+    },
+    methods: {
+
+        change(visible) {
+           
+            this.dropdownVisible = visible;
+            this.$refs.dropdownref.show()
+        },
+        handerChange() {
+            this.$refs.dropdownref.show()
+        },
+
+        search() {
+            this.$emit('search', this.defaultWhere);
+        },
+        // 重置
+        reset() {
+            this.defaultWhere = {};
+            this.search();
+        }
+
+        //  折叠悬浮中样式调整
+    },
+}
+</script>
+
+<style scoped>
+.index_box {
+    display: flex;
+}
+
+.padding {
+    padding: 20px;
+}
+</style>

+ 5 - 0
src/main.js

@@ -22,6 +22,11 @@ import '@/icons';
 Vue.component('DictSelection', DictSelection);
 Vue.config.productionTip = false;
 
+// 公共搜索文件
+import seekPage from '@/components/common/seekPage';
+
+Vue.component('seekPage', seekPage);
+
 Vue.use(EleAdmin, {
   response: {
     dataName: 'list'

+ 95 - 5
src/views/inspectionPlan/index.vue

@@ -1,7 +1,9 @@
 <template>
   <div class="ele-body">
     <el-card shadow="never">
-      <search ref="search" @search="reload"></search>
+      <!-- <search ref="search" @search="reload"></search> -->
+      <seek-page :seekList="seekList" @search="search"></seek-page>
+
       <ele-pro-table ref="tableRef" :columns="columns" :datasource="datasource" :pageSize="20"
         :pageSizes="[20, 30, 40, 50, 100]">
         <!-- 表头工具栏 -->
@@ -54,6 +56,7 @@ import edit from './components/edit.vue';
 import { getList, removeItem } from '@/api/inspectionPlan';
 import dictMixins from '@/mixins/dictMixins';
 import { getFile } from '@/api/system/file';
+import { getByCode } from '@/api/system/dictionary-data';
 
 export default {
   mixins: [dictMixins],
@@ -230,12 +233,73 @@ export default {
           showOverflowTooltip: true,
           fixed: 'right'
         }
-      ]
+      ],
+      typeList:[],//类型列表
+      qualityMode:[] 
     };
   },
+  computed: {
+    seekList() {
+      return [
+        {
+          label: "计划编码:",
+          value: "code",
+          type: "input",
+          placeholder: '',
+        },
+        {
+          label: "计划名称:",
+          value: "name",
+          type: "input",
+          placeholder: '',
+        },
+        {
+          label: "来源单据编码:",
+          value: "planSourceCode",
+          type: "input",
+          placeholder: '',
+        },
+        {
+          label: "编码",
+          value: "productCode",
+          type: "input",
+          placeholder: '',
+          width: 240,
+        },
+        {
+          label: "名称",
+          value: "productName",
+          type: "input",
+          placeholder: '',
+          width: 240,
+        },
+        {
+          label: "类型:",
+          value: 'type',
+          type: "select",
+
+          placeholder: '',
+          width: 240,
+          // 加载状态
+          planList: this.typeList
+        },
+        {
+          label: "检验方式:",
+          value: 'qualityMode',
+          type: "select",
+
+          placeholder: '',
+          width: 240,
+          planList: this.qualityMode
+        },
+      ]
+    }
+  },
   created() {
     this.requestDict('质检计划类型');
     this.requestDict('取样类型');
+    this.getTnspectionPlanType();
+    this.getQualityMethodCode();
   },
   methods: {
     // datasource({ page, limit, where }) {
@@ -252,8 +316,12 @@ export default {
         ...where
       });
     },
-    search() {
-      this.reload();
+    search(e) {
+      if(Array.isArray(e.createTime)&&e.createTime.length){
+        e.createTimeStart=e.createTime[0];
+        e.createTimeEnd = e.createTime[1];
+      };
+      this.reload(e)
     },
     openEdit(type, row) {
       this.$refs.edit.open(type, row);
@@ -271,7 +339,29 @@ export default {
     },
     reload(where) {
       this.$refs.tableRef.reload({ page: 1, where });
-    }
+    },
+
+    async getTnspectionPlanType() {
+      let res = await getByCode('inspection_plan_type');
+      if (res?.code == 0) {
+        let list = res.data.map(item => {
+          let key = Object.keys(item)[0]
+          return {value: key, label: item[key]}
+        })
+        this.typeList = list;
+      }
+    },
+
+    async getQualityMethodCode() {
+      let res = await getByCode('quality_method_code');
+      if (res?.code == 0) {
+        let list = res.data.map(item => {
+          let key = Object.keys(item)[0]
+          return {value: key, label: item[key]}
+        })
+        this.qualityMode = list;
+      }
+    },
   }
 };
 </script>

+ 5 - 1
src/views/inspectionWork/components/QualityContentTabs.vue

@@ -137,7 +137,7 @@
           <el-table-column label="质检结果" prop="qualityResults" align="center" width="120" fixed="right"
             :show-overflow-tooltip="true">
             <template slot-scope="scope">
-              <el-select v-model="scope.row.qualityResults" placeholder="请选择" style="width: 100%;"
+              <el-select @change="selectQualityResultsChange" v-model="scope.row.qualityResults" placeholder="请选择" style="width: 100%;"
                 :disabled="type == 'detail'" size="mini">
                 <el-option v-for="item in qualityResultsList" :key="item.value" :label="item.label" :value="item.value">
                 </el-option>
@@ -589,6 +589,10 @@ export default {
     handleSchemeCurrentChange(val) {
       this.schemePagination.currentPage = val;
     },
+
+    selectQualityResultsChange() {
+      this.$emit('countQualityResults')
+    }
   }
 }
 </script>

+ 14 - 2
src/views/inspectionWork/components/baseInfo.vue

@@ -255,7 +255,11 @@ export default {
     qualityType1: {
       type: String,
       default: ''
-    }
+    },
+    sampleList: {
+      type: Array,
+      default: () => []
+    },
   },
   watch: {
     'form.qualityMode': {
@@ -279,7 +283,7 @@ export default {
         }
      },
      immediate: false
-    }
+    },
   },
   data() {
     return {
@@ -437,6 +441,14 @@ export default {
       console.log(val);
       this.$emit('changeNumber', val);
     },
+
+    //更新合格率
+    updateQualificationRate(qualifiedNumber,noQualifiedNumber,qualificationRate, noQualificationRate) {
+        this.form.qualifiedNumber = qualifiedNumber;
+        this.form.noQualifiedNumber = noQualifiedNumber;
+        this.form.qualificationRate = qualificationRate + '%';
+        this.form.noQualificationRate = noQualificationRate + '%';
+    }
   }
 };
 </script>

+ 20 - 7
src/views/inspectionWork/edit.vue

@@ -13,7 +13,8 @@
         :scheme-list="schemeList" :loading="loading" :form="form" @handleSelectionChange="handleSelectionChange1"
         @batch-quality="batchQuality" @batch-dispose="batchDispose" @handleDetail="handleDetail"
         @inputWeight="inputWeight" @handleDispose="handleDispose" @changeSamUnit="changeSamUnit"
-        @handleSample1="handleSample1" @handleSampleSubmit="handleSampleSubmit" @getConditionType="getConditionType"/>
+        @handleSample1="handleSample1" @handleSampleSubmit="handleSampleSubmit" @getConditionType="getConditionType"
+        @countQualityResults="countQualityResults"/>
     </el-card>
 
     <sampleListDialog ref="detailRef" @handleConfirm="handleConfirm" @handleDispose="handleDispose"></sampleListDialog>
@@ -106,7 +107,7 @@ export default {
       SampleListbyReportList: [],
       qualityTimeStart: '',
       isReportProcessProduce: false,
-
+      addStatus: [],
     };
   },
   watch: {
@@ -136,11 +137,11 @@ export default {
       this.$refs.tabsRef.tabsConditionType(null)
 
       this.form.qualityMode = val;
-      const sData = this.$refs.tabsRef.$refs.sourceTable.getData()
       //检验方式 全检
       if (this.form.qualityMode == 1) {
         this.activeName = '2';
         this.form.sampleNumber = ''
+        const sData = this.$refs.tabsRef.$refs.sourceTable.getData()
         if (sData.length == 0) {
           for (let i = 0; i < sData.length; i++) {
             this.$set(sData[i], 'qualityStatus', 2)
@@ -148,7 +149,6 @@ export default {
         }
         console.log(this.$refs.tabsRef.$refs.sourceTable.getData(), 'packingList')
         this.getProSamList(sData)
-
       } else {
         this.activeName = '1';
         if (!flag) {
@@ -219,7 +219,8 @@ export default {
           }
         }
       } else {
-        this.sampleList = list;
+        // this.sampleList = list;
+        this.sampleList = this.addStatus
       }
     },
     //输入取样数量
@@ -576,9 +577,10 @@ export default {
         }
       })
       console.log(addStatus, '样品清单12123123')
-
       if (addStatus.length > 0) {
         this.sampleList = addStatus;
+        this.addStatus = addStatus;
+
       } else {
         this.getProSamList(this.packingList)
       }
@@ -905,7 +907,7 @@ export default {
         }
       }
       this.sampleList = result;
-      this.sampleNumber = this.sampleList.length;
+      this.form.sampleNumber = this.sampleList.length;
     },
     validateWeight(measureQ, sampleCount) {
       let totalMaxPossible = 0;
@@ -993,6 +995,17 @@ export default {
           });
         }
         this.sampleNumber = this.sampleList.length;
+    },
+
+    //计算合格率
+    countQualityResults() {
+      let sampleList = this.sampleList; //样品清单
+      let sampleNumber = this.form.total; //样品总数
+      let qualifiedNumber = sampleList.filter(item => item.qualityResults == 1 || item.qualityResults == 3).length;
+      let noQualifiedNumber = sampleList.filter(item => item.qualityResults == 2 ).length;
+      let qualificationRate = ( qualifiedNumber / sampleNumber).toFixed(4) * 100; //合格率
+      let noQualificationRate = (noQualifiedNumber / sampleNumber).toFixed(4) * 100; //不合格率
+      this.$refs.baseInfoRefs.updateQualificationRate(qualifiedNumber,noQualifiedNumber,qualificationRate, noQualificationRate);
     }
   }
 };

+ 100 - 4
src/views/inspectionWork/index.vue

@@ -1,7 +1,9 @@
 <template>
   <div class="ele-body">
     <el-card shadow="never">
-      <search ref="search" @search="search"></search>
+      <!-- <search ref="search" @search="search"></search> -->
+      <seek-page :seekList="seekList" @search="search"></seek-page>
+       
       <ele-pro-table ref="table" :columns="columns" :datasource="datasource" :pageSize="20"
         :pageSizes="[20, 30, 40, 50, 100]">
         <!-- 表头工具栏 -->
@@ -87,6 +89,7 @@ import search from './components/search.vue';
 import { getList, removeItem, updateCertificateNumber } from '@/api/inspectionWork';
 import dictMixins from '@/mixins/dictMixins';
 import { getFile } from '@/api/system/file';
+import { getByCode } from '@/api/system/dictionary-data';
 
 export default {
   mixins: [dictMixins],
@@ -139,7 +142,7 @@ export default {
           showOverflowTooltip: true
         },
         {
-          label: '取样类型',
+          label: '质检方式',
           prop: 'qualityMode',
           slot: 'qualityMode',
           align: 'center',
@@ -275,13 +278,84 @@ export default {
         certificateNumber: ''
       },
       certificateVisible: false,
-      rowData: {}
+      rowData: {},
+      typeList:[],//类型列表
+      qualityMode:[], //取样类型
+      statusList: [{
+        value: 0,
+        label: '未报工'
+      },
+      {
+        value: 1,
+        label: '已报工'
+      }]
     };
   },
   created() {
     this.requestDict('质检计划类型');
     this.requestDict('不良品处理类型');
     this.requestDict('取样类型');
+    this.getTnspectionPlanType();
+    this.getQualityMethodCode();
+  },
+  computed:{
+    seekList() {
+      return [
+        {
+          label: "工单编码:",
+          value: "code",
+          type: "input",
+          placeholder: '',
+        },
+        {
+          label: "工单名称:",
+          value: "name",
+          type: "input",
+          placeholder: '',
+        },
+        {
+          label: "来源单号:",
+          value: "sourceCode",
+          type: "input",
+          placeholder: '',
+        },
+        {
+          label: "类型:",
+          value: "qualityType",
+          type: "select",
+          placeholder: '',
+          planList:this.typeList
+        },
+        {
+          label: "质检方式:",
+          value: "qualityMode",
+          type: "select",
+          placeholder: '',
+          planList:this.qualityMode
+
+        },
+        {
+          label: "编码:",
+          value: "productCode",
+          type: "input",
+          placeholder: '',
+        },
+        {
+          label: "名称:",
+          value: "productName",
+          type: "input",
+          placeholder: '',
+        },
+        {
+          label: "状态:",
+          value: "status",
+          type: "select",
+          placeholder: '',
+          planList:this.statusList
+
+        },
+      ]
+    },
   },
   methods: {
     datasource({ page, where, limit }) {
@@ -362,7 +436,29 @@ export default {
         this.done();
       }
       this.certificateVisible = false;
-    }
+    },
+
+    async getTnspectionPlanType() {
+      let res = await getByCode('inspection_plan_type');
+      if (res?.code == 0) {
+        let list = res.data.map(item => {
+          let key = Object.keys(item)[0]
+          return {value: key, label: item[key]}
+        })
+        this.typeList = list;
+      }
+    },
+
+    async getQualityMethodCode() {
+      let res = await getByCode('quality_method_code');
+      if (res?.code == 0) {
+        let list = res.data.map(item => {
+          let key = Object.keys(item)[0]
+          return {value: key, label: item[key]}
+        })
+        this.qualityMode = list;
+      }
+    },
   }
 };
 </script>