From 63347dd76e7515abec15559a1b81349381a724fc Mon Sep 17 00:00:00 2001
From: loulijun2021 <1694218219@qq.com>
Date: 星期二, 26 九月 2023 17:34:37 +0800
Subject: [PATCH] 1.工序报工45%

---
 src/views/produce/stepReport.vue |  407 ++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 328 insertions(+), 79 deletions(-)

diff --git a/src/views/produce/stepReport.vue b/src/views/produce/stepReport.vue
index ec84618..3c9081f 100644
--- a/src/views/produce/stepReport.vue
+++ b/src/views/produce/stepReport.vue
@@ -286,104 +286,204 @@
       v-el-drag-dialog
       :title="dialogTitle"
       :visible.sync="dialogVisible"
-      width="800px"
+      width="1160px"
       :close-on-click-modal="false"
-      top="15vh"
+      top="7vh"
       @closed="handleClose"
       @close="handleClose"
     >
-      <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="80px">
+      <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="110px">
+        <el-divider content-position="left">鍩烘湰淇℃伅</el-divider>
         <el-form-item label="宸ュ崟缂栧彿" class="dialogFormItem">
           <div class="dialogFormItemDiv">{{ dialogForm.wo_code }}</div>
-          <!--          <el-input v-model="dialogForm.wo_code" style="width: 200px" />-->
         </el-form-item>
         <el-form-item label="浜у搧缂栫爜" class="dialogFormItem">
           <div class="dialogFormItemDiv">{{ dialogForm.partnumber }}</div>
-          <!--          <el-input v-model="dialogForm.partnumber" style="width: 200px" />-->
         </el-form-item>
         <el-form-item label="浜у搧鍚嶇О" class="dialogFormItem">
           <div class="dialogFormItemDiv">{{ dialogForm.partname }}</div>
-          <!--          <el-input v-model="dialogForm.partname" style="width: 200px" />-->
         </el-form-item>
         <el-form-item label="瑙勬牸鍨嬪彿" class="dialogFormItem">
           <div class="dialogFormItemDiv">{{ dialogForm.partspec }}</div>
-          <!--          <el-input v-model="dialogForm.partspec" style="width: 200px" />-->
         </el-form-item>
         <el-form-item label="褰撳墠宸ュ簭" class="dialogFormItem">
           <div class="dialogFormItemDiv">{{ dialogForm.stepname }}</div>
-          <!--          <el-input v-model="dialogForm.stepname" style="width: 200px" />-->
         </el-form-item>
         <el-form-item label="涓嬮亾宸ュ簭" class="dialogFormItem">
           <div class="dialogFormItemDiv">{{ dialogForm.nextstepname }}</div>
-          <!--          <el-input v-model="dialogForm.nextstepname" style="width: 200px" />-->
         </el-form-item>
         <el-form-item label="浠诲姟鏁伴噺" class="dialogFormItem">
           <div class="dialogFormItemDiv">{{ dialogForm.planqty }}</div>
-          <!--          <el-input v-model="dialogForm.planqty" style="width: 200px" />-->
         </el-form-item>
         <el-form-item label="鏈姤/宸叉姤" class="dialogFormItem">
           <div class="dialogFormItemDiv">{{ dialogForm.noreportqty + '/' + dialogForm.reportqty }}</div>
-          <!--          <el-input v-model="dialogForm.planqty" style="width: 200px" />-->
         </el-form-item>
-        <el-form-item label="璁′欢鏂瑰紡">
-          <el-radio-group v-model="dialogForm.reckway" style="width: 200px;" @change="reckwayChange">
-            <el-radio label="person">涓汉</el-radio>
-            <el-radio label="group">鐝粍</el-radio>
-          </el-radio-group>
+
+        <el-form-item label="涓嶈壇鏁伴噺" class="dialogFormItem">
+          <div class="dialogFormItemDiv" style="color:red;">{{ dialogForm.noputqty }}</div>
         </el-form-item>
-        <el-form-item v-if="dialogForm.reckway==='group'" prop="usergroupcode" label="鐝粍">
-          <el-select
-            v-model="dialogForm.usergroupcode"
-            style="width:200px"
-            placeholder="璇烽�夋嫨"
-            filterable
-            clearable
-            :popper-append-to-body="false"
-          >
-            <el-option
-              v-for="item in usergroupArr"
-              :key="item.postcode"
-              :label="item.postname"
-              :value="item.postcode"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item prop="reportuser" label="鎶ュ伐浜哄憳">
-          <el-select
-            v-model="dialogForm.reportuser"
-            style="width:200px"
-            placeholder="璇烽�夋嫨"
-            filterable
-            clearable
-            :popper-append-to-body="false"
-          >
-            <el-option
-              v-for="item in reportuserArr"
-              :key="item.postcode"
-              :label="item.postname"
-              :value="item.postcode"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item prop="eqpcode" label="鎶ュ伐璁惧">
+
+        <el-form-item prop="eqpcode" label="鎶ュ伐璁惧" class="dialogFormItem">
           <el-select
             v-model="dialogForm.eqpcode"
             style="width:200px"
             placeholder="璇烽�夋嫨"
             filterable
-            clearable
+
             :popper-append-to-body="false"
           >
             <el-option
               v-for="item in eqpArr"
-              :key="item.postcode"
-              :label="item.postname"
-              :value="item.postcode"
+              :key="item.code"
+              :label="item.name"
+              :value="item.code"
             />
           </el-select>
         </el-form-item>
 
+        <el-form-item label="璁′欢鏂瑰紡" class="dialogFormItem">
+          <el-radio-group
+            v-model="dialogForm.reckway"
+            style="width: 200px;"
+            @change="reckwayChange"
+          >
+            <el-radio label="person">涓汉</el-radio>
+            <el-radio label="group">鐝粍</el-radio>
+          </el-radio-group>
+        </el-form-item>
+
+        <el-form-item :prop="dialogForm.reckway==='group'?'usergroupcode':''" label="鎶ュ伐鐝粍" class="dialogFormItem">
+          <el-select
+            v-model="dialogForm.usergroupcode"
+            style="width:200px"
+            placeholder="璇烽�夋嫨"
+            filterable
+            :disabled="dialogForm.reckway!=='group'"
+            :popper-append-to-body="false"
+            @change="usergroupChange"
+          >
+            <el-option
+              v-for="item in usergroupArr"
+              :key="item.usergroupcode"
+              :label="item.usergroupname"
+              :value="item.usergroupcode"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="reportuser" label="鎶ュ伐浜哄憳" class="dialogFormItem">
+          <el-select
+            v-model="dialogForm.reportuser"
+            style="width:200px"
+            placeholder="璇烽�夋嫨"
+            filterable
+            multiple
+            collapse-tags
+            :multiple-limit="dialogForm.reckway==='group'?0:1"
+            :disabled="dialogForm.reckway==='group'&&dialogForm.usergroupcode===''"
+            :popper-append-to-body="false"
+          >
+            <el-option
+              v-for="item in reportuserArr"
+              :key="item.usercode"
+              :label="item.username"
+              :value="item.usercode"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="startqty" label="鍚堟牸鏁伴噺" class="dialogFormItem">
+          <el-input v-model="dialogForm.startqty" oninput="value=value.replace(/[^\d]/g,'')" style="width: 200px" />
+        </el-form-item>
+
+        <el-divider content-position="left">涓嶈壇鏄庣粏</el-divider>
+        <el-button
+          v-waves
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="addDefect"
+        >鏂板
+        </el-button>
+
+        <el-table
+          ref="defectTableDataRef"
+          :data="defectTableData"
+          border
+          row-class-name="custom-row"
+          height="300"
+          style="width: 100%;margin-top: 15px;"
+          highlight-current-row
+          :header-cell-style="this.$headerCellStyle"
+          :cell-style="this.$cellStyle"
+        >
+          <el-table-column
+            type="index"
+            label="搴忓彿"
+            align="center"
+            width="50"
+          />
+          <el-table-column
+            prop="stepcode"
+            show-tooltip-when-overflow
+            label="缂洪櫡缂栫爜/鍚嶇О"
+            align="center"
+            min-width="450"
+          >
+            <template slot-scope="{row}">
+              <el-select
+                v-model="row.code"
+                style="width: 100%"
+                placeholder="璇烽�夋嫨"
+                multiple
+                filterable
+              >
+                <!--                collapse-tags-->
+                <el-option
+                  v-for="item in defectArr"
+                  :key="item.code"
+                  :label="item.name"
+                  :value="item.code"
+                />
+              </el-select>
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            prop="badqty"
+            label="涓嶈壇鏁伴噺"
+            show-tooltip-when-overflow
+            align="center"
+          >
+            <template slot-scope="{row}">
+              <el-input
+                v-model="row.badqty"
+                placeholder="璇疯緭鍏ユ暟閲�"
+                oninput="value=value.replace(/[^0-9]/g,'')"
+                style="width: 100%"
+                @click.stop=""
+                @change="badqtyChange"
+              />
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="鎿嶄綔"
+            width="50"
+            align="center"
+          >
+            <template slot-scope="{row}">
+              <div class="operationClass">
+                <el-tooltip v-del-tab-index class="item" effect="dark" content="鍒犻櫎" placement="top">
+                  <i
+                    class="el-icon-delete"
+                    :style="{color:$store.state.settings.theme}"
+                    style="margin-left: 7px;"
+                    @click="defectDel(row)"
+                  />
+                </el-tooltip>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
       </el-form>
+
       <span slot="footer" class="dialog-footer">
         <div class="footerButton">
           <el-button v-waves @click="dialogVisibleCancel">鍙� 娑�</el-button>
@@ -404,16 +504,22 @@
 <script>
 import Pagination from '@/components/Pagination'
 import $ from 'jquery'
-import { getCookie } from '@/utils/auth'
 import elDragDialog from '@/directive/el-drag-dialog'
 import waves from '@/directive/waves'
 import {
   MesOrderNgStepSearch,
   MesOrderNgSubStepSearch,
   MesOrderStepSearch, MesOrderStepStart,
-  MesOrderWxStepSearch
+  MesOrderWxStepSearch, SavaMesOrderStepReport
 } from '@/api/WorkOrder'
-import { validateCode } from '@/utils/global'
+import {
+  DefectPermissions,
+  EqpPermissions,
+  GroupsPermissions,
+  GroupsPersonPermissions,
+  PersonPermissions
+} from '@/api/GeneralBasicData'
+import { nanoid } from 'nanoid'
 
 export default {
   name: 'SCKBG',
@@ -463,10 +569,10 @@
         'nextstepprice': '',
         'stepdesc': '',
         'planqty': 0,
-        'startqty': 0,
-        'noreportqty': 0,
-        'reportqty': 0,
-        'noputqty': 0,
+        'startqty': 0, //
+        'noreportqty': 0, // 鏈姤鏁伴噺
+        'reportqty': 0, // 宸叉姤鏁伴噺
+        'noputqty': 0, // 涓嶈壇鏁伴噺
         'wkshopcode': '',
         'wkshopname': '',
         'eqpcode': '',
@@ -477,16 +583,23 @@
         defectlist: '', // 涓嶈壇姹囨��
         reckway: 'person', // 璁′欢鏂瑰紡(鐝粍:group銆佷釜浜�:person)
         usergroupcode: '', // 鐝粍缂栫爜
-        reportuser: '' // 鎶ュ伐浜哄憳
+        reportuser: [] // 鎶ュ伐浜哄憳
 
       },
       dialogFormRules: {
-        postcode: [
-          { required: true, validator: validateCode, trigger: ['blur', 'change'] }
+        eqpcode: [
+          { required: true, message: '璇烽�夋嫨鎶ュ伐璁惧', trigger: ['blur', 'change'] }
         ],
-        postname: [
-          { required: true, message: '璇疯緭鍏ュ矖浣嶅悕绉�', trigger: ['blur', 'change'] }
+        usergroupcode: [
+          { required: true, message: '璇烽�夋嫨鎶ュ伐鐝粍', trigger: ['blur', 'change'] }
+        ],
+        reportuser: [
+          { required: true, message: '璇烽�夋嫨鎶ュ伐浜哄憳', trigger: ['blur', 'change'] }
+        ],
+        startqty: [
+          { required: true, message: '璇疯緭鍏ュ悎鏍兼暟閲�', trigger: ['blur', 'change'] }
         ]
+
       },
       reckwayArr: [// 鎶ュ伐绫诲瀷
         { code: 'group', name: '鐝粍' },
@@ -495,11 +608,12 @@
       reportuserArr: [], // 鎶ュ伐浜哄憳
       usergroupArr: [], // 鎶ュ伐鐝粍
       eqpArr: [], // 鎶ュ伐璁惧
-      defectArr: []// 涓嶈壇缂洪櫡
+      defectArr: [], // 涓嶈壇缂洪櫡
+
+      defectTableData: []
 
     }
   },
-
   created() {
 
   },
@@ -508,8 +622,23 @@
     this.getHeight()
 
     this.tabClick()
+
+    this.getAllSelectArr()
   },
   methods: {
+    async getAllSelectArr() {
+      const { data: res1 } = await GroupsPermissions()// 鐝粍
+      this.usergroupArr = res1
+
+      const { data: res2 } = await PersonPermissions() // 浜哄憳
+      this.reportuserArr = res2
+
+      const { data: res3 } = await DefectPermissions() // 缂洪櫡
+      this.defectArr = res3
+
+      const { data: res4 } = await EqpPermissions() // 璁惧
+      this.eqpArr = res4
+    },
     tabClick() {
       let belong
       switch (this.activeName) {
@@ -653,13 +782,47 @@
     },
     // 鐢熶骇寮�鎶ュ伐鎵爜鑾峰彇宸ュ崟瀵瑰簲宸ュ簭浠诲姟(涓嶈壇鏄庣粏)
     async getMesOrderNgSubStepSearch(wocode, stepcode) {
-      const data = {
-        wocode, stepcode
-      }
-      const res = await MesOrderNgSubStepSearch(data)
+      // const data = {
+      //   wocode, stepcode
+      // }
+      // const res = await MesOrderNgSubStepSearch(data)
     },
     // 瀵硅瘽妗嗗叧闂簨浠�
     handleClose() {
+      this.dialogForm = {
+        'wo_code': '',
+        'partnumber': '',
+        'partname': '',
+        'partspec': '',
+        'seq': '',
+        'stepcode': '',
+        'stepname': '',
+        'stepprice': '', // 宸ュ簭鍗曚环
+        'nextstepcode': '',
+        'nextstepname': '',
+        'nextstepprice': '',
+        'stepdesc': '',
+        'planqty': 0,
+        'startqty': 0, //
+        'noreportqty': 0, // 鏈姤鏁伴噺
+        'reportqty': 0, // 宸叉姤鏁伴噺
+        'noputqty': 0, // 涓嶈壇鏁伴噺
+        'wkshopcode': '',
+        'wkshopname': '',
+        'eqpcode': '',
+        'eqpname': '',
+
+        remarks: '', // 澶囨敞
+        inbarcode: '', // 鍏ュ簱鏉$爜
+        defectlist: '', // 涓嶈壇姹囨��
+        reckway: 'person', // 璁′欢鏂瑰紡(鐝粍:group銆佷釜浜�:person)
+        usergroupcode: '', // 鐝粍缂栫爜
+        reportuser: [] // 鎶ュ伐浜哄憳
+
+      }
+
+      this.defectTableData = []
+
       this.$refs.dialogForm.clearValidate()
     },
     // 瀵硅瘽妗嗗彇娑�
@@ -669,14 +832,100 @@
     },
     // 瀵硅瘽妗嗙‘璁�
     dialogVisibleConfirm() {
-      // this.$refs.dialogForm.validate(async valid => {
-      //   if (valid) {
-      //
-      //   }
-      // })
+      this.$refs.dialogForm.validate(async valid => {
+        if (valid) {
+          if (this.activeName === '鐢熶骇鍒楄〃') {
+            if (this.defectTableData.find(i => i.code.length === 0)) {
+              return this.$message.info('缂洪櫡缂栫爜/鍚嶇О涓嶈兘涓虹┖锛�')
+            }
+            if (this.defectTableData.find(i => i.badqty.toString().trim() === '' || parseFloat(i.badqty) === 0)) {
+              return this.$message.info('涓嶈壇鏁伴噺涓嶈兘涓虹┖鎴栦负闆讹紒')
+            }
+
+            if (parseFloat(this.dialogForm.noreportqty) < parseFloat(this.dialogForm.startqty) + parseFloat(this.dialogForm.noputqty)) {
+              return this.$message.info('鍚堟牸鏁伴噺鍔犱笉鑹暟閲忎笉鑳藉ぇ浜庝簡鏈姤鏁伴噺!')
+            }
+
+            const defectlist = []
+            this.defectTableData.forEach(i => {
+              defectlist.push({
+                defect_code: i.code.join(','),
+                badqty: i.badqty
+              })
+            })
+            const data = {
+              mesordercode: this.dialogForm.wo_code,
+              partcode: this.dialogForm.partnumber,
+              stepseq: this.dialogForm.seq,
+              stepcode: this.dialogForm.stepcode,
+              stepprice: this.dialogForm.stepprice,
+              eqpcode: this.dialogForm.eqpcode,
+              inbarcode: '',
+              reckway: this.dialogForm.reckway,
+              usergroupcode: this.dialogForm.usergroupcode,
+              reportuser: this.dialogForm.reportuser.join(','),
+              taskqty: this.dialogForm.planqty,
+              // startqty: this.dialogForm.startqty,
+              // reportqty: this.dialogForm.reportqty,
+
+              startqty: this.dialogForm.startqty,
+              reportqty: this.dialogForm.startqty, // 鎶ュ伐鏁伴噺
+
+              defectlist,
+              remarks: ''
+            }
+            // console.log(JSON.parse(JSON.stringify(this.defectTableData)))
+            // console.log(JSON.parse(JSON.stringify(data)))
+
+            const res = await SavaMesOrderStepReport(data)
+            // console.log(res)
+            if (res.code === '200') {
+              this.$notify.success('鎶ュ伐鎴愬姛锛�')
+              await this.search()
+              this.dialogVisible = false
+            } else {
+              this.$notify.error('鎶ュ伐澶辫触锛�')
+            }
+          }
+        }
+      })
+    },
+    // 缂洪櫡鏂板
+    addDefect() {
+      if (this.defectTableData.find(i => i.code.length === 0)) {
+        return this.$message.info('缂洪櫡缂栫爜/鍚嶇О涓嶈兘涓虹┖锛�')
+      }
+      if (this.defectTableData.find(i => i.badqty.toString().trim() === '' || parseFloat(i.badqty) === 0)) {
+        return this.$message.info('涓嶈壇鏁伴噺涓嶈兘涓虹┖鎴栦负闆讹紒')
+      }
+
+      this.defectTableData.push({
+        uuid: nanoid(), code: [], badqty: ''
+      })
+    },
+    // 缂洪櫡鍒犻櫎
+    defectDel(row) {
+      this.defectTableData = this.defectTableData.filter(i => i.uuid !== row.uuid)
+
+      this.dialogForm.noputqty = 0
+      this.defectTableData.forEach(i => {
+        this.dialogForm.noputqty += parseFloat(i.badqty)
+      })
+    },
+    badqtyChange(val) {
+      this.dialogForm.noputqty = 0
+      this.defectTableData.forEach(i => {
+        this.dialogForm.noputqty += parseFloat(i.badqty)
+      })
     },
     reckwayChange(val) {
-
+      // console.log(val)
+      this.dialogForm.usergroupcode = ''
+      this.dialogForm.reportuser = []
+    },
+    async usergroupChange(val) {
+      const { data: res } = await GroupsPersonPermissions({ groupcode: val })
+      this.dialogForm.reportuser = res[0].usercode_list ? res[0].usercode_list.split(',') : []
     },
     rowClick(row, event, column) {
       this.radioSelected = row.id

--
Gitblit v1.9.3