Jelajahi Sumber

质量管理

damon227 1 tahun lalu
induk
melakukan
b7e1d662ae

+ 18 - 0
src/api/quality.js

@@ -8,3 +8,21 @@ export function getList (params) {
     params: params
   })
 }
+
+// 不合格审理单列表
+export function getDisList (params) {
+  return request({
+    url: request.adornUrl(`/biz-service/disqualification/list`),
+    method: 'get',
+    params: params
+  })
+}
+
+// 不合格品列表
+export function getUnqList (params) {
+  return request({
+    url: request.adornUrl(`/biz-service/unqualified/list`),
+    method: 'get',
+    params: params
+  })
+}

+ 7 - 0
src/utils/enums.js

@@ -55,3 +55,10 @@ export const projectStateOption = [
     {label: '初次重新报价', value: '7'},
     {label: '精准重新报价', value: '8'}
 ]
+
+// 处理状态
+export const measureStateOption = [
+    {label: '待处理', value: '1'},
+    {label: '待验证', value: '2'},
+    {label: '跟踪验证完成', value: '3'}
+]

+ 71 - 4
src/views/modules/quality/disqualification-dispose.vue

@@ -7,7 +7,68 @@
       ref="dataForm"
       @keyup.enter.native="dataFormSubmit()"
       label-width="130px"
-    ></el-form>
+    >
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="处理分析人" prop="analyseId">
+            <UserComponent v-model="dataForm.analyseId" :user-id.sync="dataForm.analyseId"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="处置措施人" prop="measureId">
+            <UserComponent v-model="dataForm.measureId" :user-id.sync="dataForm.measureId"/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+           <el-form-item label="处理分析" prop="disposeAnalyse">
+            <el-input v-model="dataForm.disposeAnalyse" placeholder="请输入处理分析" type="textarea"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+           <el-form-item label="处置措施" prop="disposeMeasure">
+            <el-input v-model="dataForm.disposeMeasure" placeholder="请输入处置措施" type="textarea"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="6">
+          <el-form-item label="返工数量" prop="reworkCnt">
+            <el-input-number v-model="dataForm.reworkCnt" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="返修数量" prop="repairCnt">
+            <el-input-number v-model="dataForm.repairCnt" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="不合格/报损数量" prop="damageCnt">
+            <el-input-number v-model="dataForm.damageCnt" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="让步接收数量" prop="concessionCnt">
+            <el-input-number v-model="dataForm.concessionCnt" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="顾客放行表">
+            <upload-component :accept="'*'" v-model="dataForm.releaseList" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="附件">
+            <upload-component :accept="'*'" v-model="dataForm.attachList" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
     <span slot="footer" class="dialog-footer">
       <el-button @click="onChose">取消</el-button>
       <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
@@ -16,17 +77,23 @@
 </template>
 
 <script>
+import UserComponent from '../common/user-component'
+import UploadComponent from '../common/upload-component-v2'
 export default {
   name: 'quality-disqualification-dispose',
+  components: {UploadComponent, UserComponent},
   data () {
     return {
       dataForm: {},
-      dataRule: {}
+      dataRule: {
+        analyseId: [{required: true, message: '请选择处理分析人', trigger: 'change'}],
+        measureId: [{required: true, message: '请选择处置措施人', trigger: 'change'}],
+        disposeAnalyse: [{required: true, message: '请输入处理分析', trigger: 'blur'}],
+        disposeMeasure: [{required: true, message: '请输入处置措施', trigger: 'blur'}]
+      }
     }
   },
-
   mounted () {},
-
   methods: {
     init (item) {
       this.dataForm = { ...item }

+ 159 - 1
src/views/modules/quality/disqualification-update.vue

@@ -7,7 +7,163 @@
       ref="dataForm"
       @keyup.enter.native="dataFormSubmit()"
       label-width="130px"
-    ></el-form>
+    >
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="审理编码">
+            <el-input disabled v-model="dataForm.invoicesCode"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="任务单编码">
+            <el-input disabled v-model="dataForm.orderCode"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="批次号">
+            <el-input disabled v-model="dataForm.batchNumber"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="物料名称">
+            <el-input disabled v-model="dataForm.productName"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="生产编号">
+            <el-input disabled v-model="dataForm.productNumber"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="工艺名称">
+            <el-input disabled v-model="dataForm.techName"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="检验工序节点">
+            <el-input disabled v-model="dataForm.nodeName"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="发生工序节点">
+            <el-input v-model="dataForm.disqualificationNodeName"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="交检数量">
+            <el-input disabled v-model="dataForm.cnt"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="不合格数量">
+            <el-input v-model="dataForm.disqualificationCnt"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="处理状态">
+            <el-input v-model="dataForm.measureState"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="当前审理人">
+            <el-input disabled v-model="dataForm.approver"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="责任人">
+            <el-input disabled v-model="dataForm.responsibleName"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="处理分析">
+            <el-input v-model="dataForm.disposeAnalyse"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="处理分析人">
+            <el-input v-model="dataForm.analyseName"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="处置措施">
+            <el-input v-model="dataForm.disposeMeasure"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="处置措施人">
+            <el-input v-model="dataForm.measureName"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="验证结论">
+            <el-input v-model="dataForm.verifyConclusion"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="验证人">
+            <el-input v-model="dataForm.verifyName"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="检验时间">
+            <el-input disabled v-model="dataForm.createTime"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="审理评审状态">
+            <el-input disabled v-model="dataForm.approveState"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="返工数量">
+            <el-input v-model="dataForm.reworkCnt"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="返修数量">
+            <el-input v-model="dataForm.repairCnt"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="不合格/报损数量">
+            <el-input v-model="dataForm.damageCnt"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="让步接收数量">
+            <el-input v-model="dataForm.concessionCnt"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="顾客放行表">
+            <upload-component :accept="'*'" v-model="dataForm.releaseList" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="附件">
+            <upload-component :accept="'*'" v-model="dataForm.attachList" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
     <span slot="footer" class="dialog-footer">
       <el-button @click="onChose">取消</el-button>
       <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
@@ -16,8 +172,10 @@
 </template>
 
 <script>
+import UploadComponent from '../common/upload-component-v2'
 export default {
   name: 'quality-disqualification-update',
+  components: {UploadComponent},
   data () {
     return {
       dataForm: {},

+ 27 - 6
src/views/modules/quality/disqualification-verify.vue

@@ -7,7 +7,19 @@
       ref="dataForm"
       @keyup.enter.native="dataFormSubmit()"
       label-width="130px"
-    ></el-form>
+    >
+      <el-row>
+        <el-col>
+          <el-form-item label="验证结论" prop="verifyConclusion">
+            <el-input
+              v-model="dataForm.verifyConclusion"
+              placeholder="请输入验证结论"
+              type="textarea"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
     <span slot="footer" class="dialog-footer">
       <el-button @click="onChose">取消</el-button>
       <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
@@ -20,16 +32,23 @@ export default {
   name: 'quality-disqualification-verify',
   data () {
     return {
-      dataForm: {},
-      dataRule: {}
+      dataForm: {
+        invoicesId: '',
+        verifyConclusion: ''
+      },
+      dataRule: {
+        verifyConclusion: [
+          { required: true, message: '请输入验证结论', trigger: 'blur' }
+        ]
+      }
     }
   },
 
   mounted () {},
 
   methods: {
-    init (item) {
-      this.dataForm = { ...item }
+    init (invoicesId) {
+      this.dataForm.invoicesId = invoicesId
     },
     onChose () {
       this.$emit('onChose')
@@ -38,7 +57,9 @@ export default {
       this.$refs['dataForm'].validate((valid) => {
         if (valid) {
           this.$http({
-            url: this.$http.adornUrl(`/biz-service/disqualification/updateVerify`),
+            url: this.$http.adornUrl(
+              `/biz-service/disqualification/updateVerify`
+            ),
             method: 'post',
             data: this.$http.adornData({ ...this.dataForm, orgId: this.orgId })
           }).then(({ data }) => {

+ 22 - 6
src/views/modules/quality/disqualification.vue

@@ -120,7 +120,7 @@
         >
         </el-table-column>
         <el-table-column
-          prop="state"
+          prop="measureStateStr"
           header-align="center"
           align="center"
           :show-tooltip-when-overflow="true"
@@ -208,7 +208,7 @@
         >
         </el-table-column>
         <el-table-column
-          prop="approveState"
+          prop="approveStateStr"
           header-align="center"
           align="center"
           :show-tooltip-when-overflow="true"
@@ -335,10 +335,11 @@
 </template>
 
 <script>
-import {getList} from '@/api/quality'
+import {getDisList} from '@/api/quality'
 import QualityDisqualificationUpdate from './disqualification-update'
 import QualityDisqualificationDispose from './disqualification-dispose'
 import QualityDisqualificationVerify from './disqualification-verify'
+import {approveStateOption, measureStateOption} from '@/utils/enums'
 export default {
   name: 'quality-disqualification',
   components: {QualityDisqualificationUpdate, QualityDisqualificationDispose, QualityDisqualificationVerify},
@@ -347,8 +348,10 @@ export default {
       updateVisible: false,
       disposeVisible: false,
       verifyVisible: false,
+      approveStateOption: approveStateOption,
+      measureStateOption: measureStateOption,
       dataForm: {},
-      dataList: [{}],
+      dataList: [],
       pageIndex: 1,
       pageSize: 10,
       totalPage: 0,
@@ -356,6 +359,9 @@ export default {
     }
   },
   mounted () {},
+  created () {
+    this.search()
+  },
   methods: {
     onChose () {
       this.updateVisible = false
@@ -385,10 +391,20 @@ export default {
         batchNumber: this.dataForm.batchNumber,
         productName: this.dataForm.productName
       }
-      getList(param).then(({ data }) => {
+      getDisList(param).then(({ data }) => {
         if (data && data.code === '200') {
           this.dataList = data.data.records
           this.totalPage = Number(data.data.total)
+          this.dataList.forEach(item => {
+            let option = this.approveStateOption.find(t => t.value === item.approveState)
+            if (option != null) {
+              item.approveStateStr = option.label
+            }
+            let measure = this.measureStateOption.find(t => t.value === item.state)
+            if (measure != null) {
+              item.measureStateStr = measure.label
+            }
+          })
         } else {
           this.dataList = []
           this.totalPage = 0
@@ -411,7 +427,7 @@ export default {
     verifyHandle (item) {
       this.verifyVisible = true
       this.$nextTick(() => {
-        this.$refs.verify.init(item)
+        this.$refs.verify.init(item.invoicesId)
       })
     }
   }

+ 23 - 3
src/views/modules/quality/first.vue

@@ -176,7 +176,7 @@
           </template>
         </el-table-column>
         <el-table-column
-          prop="approveState"
+          prop="approveStateStr"
           header-align="center"
           align="center"
           :show-tooltip-when-overflow="true"
@@ -221,20 +221,25 @@
       </el-pagination>
     </template>
     <quality-first-update ref="update" v-if="updateVisible" @onChose="onChose" />
+    <attach-detail-dialog ref="attachDetail" v-if="attachVisible" />
   </div>
 </template>
 
 <script>
 import {getList} from '@/api/quality'
 import QualityFirstUpdate from './first-update'
+import AttachDetailDialog from '../common/attach-detail-dialog'
+import {approveStateOption} from '@/utils/enums'
 export default {
   name: 'quality-first',
-  components: {QualityFirstUpdate},
+  components: {QualityFirstUpdate, AttachDetailDialog},
   data () {
     return {
       updateVisible: false,
+      attachVisible: false,
+      approveStateOption: approveStateOption,
       dataForm: {},
-      dataList: [{}],
+      dataList: [],
       pageIndex: 1,
       pageSize: 10,
       totalPage: 0,
@@ -242,6 +247,9 @@ export default {
     }
   },
   mounted () {},
+  created () {
+    this.search()
+  },
   methods: {
     onChose () {
       this.updateVisible = false
@@ -273,6 +281,12 @@ export default {
         if (data && data.code === '200') {
           this.dataList = data.data.records
           this.totalPage = Number(data.data.total)
+          this.dataList.forEach(item => {
+            let option = this.approveStateOption.find(t => t.value === item.approveState)
+            if (option != null) {
+              item.approveStateStr = option.label
+            }
+          })
         } else {
           this.dataList = []
           this.totalPage = 0
@@ -280,6 +294,12 @@ export default {
         this.dataListLoading = false
       })
     },
+    attachDetails (attachList) {
+      this.attachVisible = true
+      this.$nextTick(() => {
+        this.$refs.attachDetail.init(attachList)
+      })
+    },
     updateHandle (item) {
       this.updateVisible = true
       this.$nextTick(() => {

+ 190 - 0
src/views/modules/quality/unqualified.vue

@@ -0,0 +1,190 @@
+<template>
+  <div>
+    <template>
+      <el-form :inline="true" :model="dataForm" @keyup.enter.native="search()">
+        <el-form-item label="物料名称">
+          <el-input
+            v-model="dataForm.productName"
+            placeholder="请输入物料名称"
+            clearable
+          />
+        </el-form-item>
+        <el-form-item label="生产批次号">
+          <el-input
+            v-model="dataForm.batchNumber"
+            placeholder="请输入批次号"
+            clearable
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="search()">查询</el-button>
+        </el-form-item>
+      </el-form>
+      <el-table
+        :data="dataList"
+        border
+        v-loading="dataListLoading"
+        style="width: 100%"
+      >
+        <el-table-column
+          label="序号"
+          type="index"
+          width="50"
+          align="center"
+        ></el-table-column>
+        <el-table-column
+          prop="disqualificationCode"
+          header-align="center"
+          align="center"
+          :show-tooltip-when-overflow="true"
+          label="不合格品编码"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="invoicesCode"
+          header-align="center"
+          align="center"
+          :show-tooltip-when-overflow="true"
+          label="审理编码"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="orderCode"
+          header-align="center"
+          align="center"
+          :show-tooltip-when-overflow="true"
+          label="任务单编码"
+        >
+        </el-table-column>
+         <el-table-column
+          prop="batchNumber"
+          header-align="center"
+          align="center"
+          :show-tooltip-when-overflow="true"
+          label="批次号"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="productName"
+          header-align="center"
+          align="center"
+          :show-tooltip-when-overflow="true"
+          label="物料名称"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="disqualificationCnt"
+          header-align="center"
+          align="center"
+          :show-tooltip-when-overflow="true"
+          label="不合格数量"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="measureStateStr"
+          header-align="center"
+          align="center"
+          :show-tooltip-when-overflow="true"
+          label="处理状态"
+        >
+        </el-table-column>
+        <el-table-column
+          fixed="right"
+          header-align="center"
+          align="center"
+          width="150"
+          label="操作"
+        >
+          <template slot-scope="scope">
+            <el-button
+              v-if="isAuth('quality:unqualified:update')"
+              type="text"
+              size="small"
+              @click="updateHandle(scope.row)"
+              >入库</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        @size-change="sizeChangeHandle"
+        @current-change="currentChangeHandle"
+        :current-page="pageIndex"
+        :page-sizes="[10, 20, 50, 100]"
+        :page-size="pageSize"
+        :total="totalPage"
+        layout="total, sizes, prev, pager, next, jumper"
+      >
+      </el-pagination>
+    </template>
+  </div>
+</template>
+
+<script>
+import {getUnqList} from '@/api/quality'
+export default {
+  name: 'quality-unqualified',
+  data () {
+    return {
+      updateVisible: false,
+      dataForm: {},
+      dataList: [],
+      pageIndex: 1,
+      pageSize: 10,
+      totalPage: 0,
+      dataListLoading: false
+    }
+  },
+  mounted () {},
+  created () {
+    this.search()
+  },
+  methods: {
+    onChose () {
+      this.updateVisible = false
+    },
+    search () {
+      this.pageIndex = 1
+      this.getDataList()
+    },
+    // 每页数
+    sizeChangeHandle (val) {
+      this.pageSize = val
+      this.pageIndex = 1
+      this.getDataList()
+    },
+    // 当前页
+    currentChangeHandle (val) {
+      this.pageIndex = val
+      this.getDataList()
+    },
+    getDataList () {
+      this.dataListLoading = true
+      let param = {
+        current: this.pageIndex,
+        size: this.pageSize,
+        batchNumber: this.dataForm.batchNumber,
+        productName: this.dataForm.productName
+      }
+      getUnqList(param).then(({ data }) => {
+        if (data && data.code === '200') {
+          this.dataList = data.data.records
+          this.totalPage = Number(data.data.total)
+        } else {
+          this.dataList = []
+          this.totalPage = 0
+        }
+        this.dataListLoading = false
+      })
+    },
+    updateHandle (item) {
+      this.updateVisible = true
+      this.$nextTick(() => {
+        this.$refs.update.init(item)
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+</style>