From 8b65642d7478407e03f751f2d5d8756b825969a2 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周六, 31 8月 2024 16:10:01 +0800
Subject: [PATCH] 优化

---
 yiqi_iwara-scada-web/src/views/main/WorkPieceInfoYield/index.vue   |    4 
 yiqi_iwara-scada-web/src/views/main/WorkPieceLogYield/editForm.vue |  137 +++++++++++++++
 yiqi_iwara-scada-web/src/views/main/WorkPieceLogYield/index.vue    |  328 ++++++++++++++++++++++++++++++++++++
 yiqi_iwara-scada-web/src/views/main/WorkPieceOutbound/index.vue    |   32 +++
 yiqi_iwara-scada-web/src/views/main/WorkPieceProcess/index.vue     |    8 
 yiqi_iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js   |   16 +
 6 files changed, 519 insertions(+), 6 deletions(-)

diff --git a/yiqi_iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js b/yiqi_iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js
index b060a0a..bdd58ca 100644
--- a/yiqi_iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js
+++ b/yiqi_iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js
@@ -50,6 +50,22 @@
     responseType: 'blob'
   })
 }
+
+export function QueryWorkPieceLogYield (parameter) {
+  return axios({
+    url: '/WorkPieceProcess/queryWorkPieceLogYield',
+    method: 'get',
+    params: parameter
+  })
+}
+export function exportWorkPieceLogYield (parameter) {
+  return axios({
+    url: '/WorkPieceProcess/exportWorkPieceLogYield',
+    method: 'get',
+    params: parameter,
+    responseType: 'blob'
+  })
+}
 /**
  * 鏌ヨ鍦ㄥ埗鍝佺洃鎺� 浜у搧缁村害鏌ヨ
  *
diff --git a/yiqi_iwara-scada-web/src/views/main/WorkPieceInfoYield/index.vue b/yiqi_iwara-scada-web/src/views/main/WorkPieceInfoYield/index.vue
index 88a20c4..41d29d5 100644
--- a/yiqi_iwara-scada-web/src/views/main/WorkPieceInfoYield/index.vue
+++ b/yiqi_iwara-scada-web/src/views/main/WorkPieceInfoYield/index.vue
@@ -117,7 +117,8 @@
       },
       advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
       queryParam: {
-        dates:[]
+        dates:[],
+        qualityState:1,//鍙煡璇㈠悎鏍肩殑 锛�1鍚堟牸 2涓嶅悎鏍� 3 鐤戜技锛夈�怑ditby shaocx,2024-08-26銆�
       },
       columns: [
         {
@@ -178,6 +179,7 @@
     initData(){
       this.queryParam.dates = [];
       this.queryParam.dates = getThisWeekRange();
+      this.queryParam.qualityState = 1;//鍙煡璇㈠悎鏍肩殑 锛�1鍚堟牸 2涓嶅悎鏍� 3 鐤戜技锛夈�怑ditby shaocx,2024-08-26銆�
     },
      //閲嶇疆
     resetQueryData(){
diff --git a/yiqi_iwara-scada-web/src/views/main/WorkPieceLogYield/editForm.vue b/yiqi_iwara-scada-web/src/views/main/WorkPieceLogYield/editForm.vue
new file mode 100644
index 0000000..0573682
--- /dev/null
+++ b/yiqi_iwara-scada-web/src/views/main/WorkPieceLogYield/editForm.vue
@@ -0,0 +1,137 @@
+锘�<!--
+ * @Author: 闄堢鏂� 15821704398@163.com
+ * @Date: 2023-03-17 10:33:58
+ * @LastEditors: 闄堢鏂� 15821704398@163.com
+ * @LastEditTime: 2023-03-17 14:33:36
+ * @FilePath: \iwara-scada-web\src\views\main\WorkPieceInfo\editForm.vue
+ * @Description: 杩欐槸榛樿璁剧疆,璇疯缃甡customMade`, 鎵撳紑koroFileHeader鏌ョ湅閰嶇疆 杩涜璁剧疆: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+-->
+<template>
+  <a-modal
+    title="璐ㄩ噺鐘舵�佷慨鏀�"
+    :width="450"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleSubmit"
+    @cancel="handleCancel"
+  >
+    <a-form-model :model="form" ref="formRef" :label-col="labelCol" :wrapper-col="wrapperCol" :rules="rules">
+      <a-form-model-item label="璐ㄩ噺鐘舵��" >
+        <a-radio-group v-model="form.status">
+          <a-radio v-for="item in statusArr" :key="item.value" :value="item.value">{{ item.title }}</a-radio>
+        </a-radio-group>
+      </a-form-model-item>
+
+      <a-form-model-item label="宸ュ簭" >
+        <a-select allow-clear v-model="form.workingProcedureCurrent" placeholder="璇烽�夋嫨宸ュ簭">
+          <a-select-option v-for="(item, index) in processSelectData" :key="index" :value="item.code">
+            {{ item.name }}
+          </a-select-option>
+        </a-select>
+      </a-form-model-item>
+
+      <a-form-model-item label="瀵嗙爜" prop="pwd">
+        <a-input v-model="form.pwd" type="password" placeholder="璇疯緭鍏ュ瘑鐮�"></a-input>
+      </a-form-model-item>
+    </a-form-model>
+  </a-modal>
+</template>
+
+<script>
+import { updatePieceStatus } from '@/api/modular/main/WorkPieceInfoManage'
+export default {
+  props: {
+    selectedRows: { type: Array, default: () => [] },
+    processSelectData: { type: Array, default: () => [] }
+  },
+  emits: ['refresh'],
+  data() {
+    return {
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 15 }
+      },
+      visible: false,
+      confirmLoading: false,
+      form: {
+        status: '',
+        pwd: ''
+      },
+      statusArr: [
+        { value: '1', title: '鍚堟牸' },
+        { value: '2', title: '涓嶅悎鏍�' },
+        { value: '3', title: '鐤戜技' }
+      ],
+      rules: {
+        status: [{ required: true, message: '璐ㄩ噺鐘舵�佷笉鑳戒负绌�', trigger: 'blur' }],
+        workingProcedureCurrent: [{ required: true, message: '宸ュ簭涓嶈兘涓虹┖', trigger: 'blur' }],
+        pwd: [{ required: true, message: '瀵嗙爜涓嶈兘涓虹┖', trigger: 'blur' }]
+      }
+    }
+  },
+  methods: {
+    handleSubmit() {
+      this.$refs.formRef.validate((vali) => {
+        if (vali) {
+          // 鍒ゆ柇鏄惁閫変腑鍚屼竴绉�
+          const status = this.selectedRows[0].qualityState
+          console.log(status, 'status')
+          const count = this.selectedRows.reduce((curr, item) => {
+            if (item.qualityState == status) {
+              curr++
+            }
+            return curr
+          }, 0)
+
+          if (count != this.selectedRows.length) {
+            return this.$message.error('閫変腑鐨勮川閲忕姸鎬佸寘鍚绉�')
+          }
+
+          this.confirmLoading = true
+          const checkPiece = this.selectedRows.reduce((curr, item) => {
+            curr.push({
+              workPieceID: item.workPieceID,
+              qualityHistoryState: item.qualityState,
+              workingProcedureCurrent: item.workingProcedureCurrent,
+              id: item.id
+            })
+            return curr
+          }, [])
+          const param = {
+            workPieceInfoLst: checkPiece,
+            qualityState: this.form.status,
+            workingProcedureCurrent: this.form.workingProcedureCurrent,
+            password: this.form.pwd
+          }
+          updatePieceStatus(param)
+            .then((res) => {
+              this.confirmLoading = false
+              this.$message.success('淇敼鎴愬姛')
+              this.handleCancel()
+              this.visible = false
+              this.$emit('refresh')
+            })
+            .catch((err) => {
+              console.log(err)
+              this.confirmLoading = false
+            })
+        } else {
+          this.confirmLoading = false
+          this.$message.error('琛ㄥ崟楠岃瘉澶辫触')
+        }
+      })
+    },
+    handleCancel() {
+      this.form = {
+        status: '',
+        pwd: ''
+      }
+      this.visible = false
+    }
+  }
+}
+</script>
diff --git a/yiqi_iwara-scada-web/src/views/main/WorkPieceLogYield/index.vue b/yiqi_iwara-scada-web/src/views/main/WorkPieceLogYield/index.vue
new file mode 100644
index 0000000..b6c0f05
--- /dev/null
+++ b/yiqi_iwara-scada-web/src/views/main/WorkPieceLogYield/index.vue
@@ -0,0 +1,328 @@
+锘�<template>
+  <div>
+    <x-card :bordered="false" v-if="hasPerm('WorkPieceInfo:page')">
+      <div slot="content" class="table-page-search-wrapper">
+        <a-form :label-col="labelCol" :wrapper-col="wrapperCol">
+          <a-row :gutter="gutter">
+            <!-- <a-col :md="colMd" :sm="colSm">
+              <a-form-item label="璁惧鍚嶇О">
+                <a-select
+                  show-search
+                  option-filter-prop="children"
+                  :filter-option="filterOption"
+                  :allowClear="true"
+                  style="width: 100%"
+                  v-model="queryParam.EquipmentID"
+                  placeholder="璇烽�夋嫨璁惧鍚嶇О"
+                >
+                  <a-select-option v-for="item in equitypeData" :key="item.id" :value="item.equipmentId">{{
+                    item.equipmentName
+                  }}</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col> -->
+            <a-col :md="colMd" :sm="colSm">
+              <a-form-item label="宸ヤ欢鍙�">
+                <a-input v-model="queryParam.workPieceID" allow-clear placeholder="璇疯緭鍏ュ伐浠跺彿" />
+              </a-form-item>
+            </a-col>
+            <a-col :md="colMd" :sm="colSm">
+              <a-form-item label="鍒涘缓浜�">
+                <a-input v-model="queryParam.createdUserName" allow-clear placeholder="璇疯緭鍏ュ垱寤轰汉" />
+              </a-form-item>
+            </a-col>
+            <a-col :md="colMd" :sm="colSm">
+                <a-form-item label="宸ュ簭">
+                  <a-select
+                    allow-clear
+                    style="width: 100%"
+                    v-model="queryParam.workingProcedure"
+                    placeholder="璇烽�夋嫨宸ュ簭"
+                  >
+                    <a-select-option v-for="(item, index) in ProcessSelectData" :key="index" :value="item.code">
+                      {{ item.name }}
+                    </a-select-option>
+                  </a-select>
+                </a-form-item>
+              </a-col>
+              <a-col :md="colMd2" :sm="colSm2">
+                <a-form-item label="鏃堕棿">
+                  <a-range-picker style="width:100%" :show-time="{format:'HH:mm'}" v-model="queryParam.dates" format="YYYY-MM-DD HH:mm" />
+                </a-form-item>
+              </a-col>
+              
+            <!-- <template v-if="advanced">
+            </template> -->
+            <a-col :md="colMd" :sm="colSm">
+              <span class="table-page-search-submitButtons">
+                <a-button type="primary" @click="getData(1)">鏌ヨ</a-button>
+                <a-button style="margin-left: 8px" @click="resetQueryData">閲嶇疆</a-button>
+                <a @click="toggleAdvanced" style="margin-left: 8px">
+                  {{ advanced ? '鏀惰捣' : '灞曞紑' }}
+                  <a-icon :type="advanced ? 'up' : 'down'" />
+                </a>
+              </span>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+    </x-card>
+    <a-card :bordered="false">
+      <div style="margin-bottom:10px">
+        <a-button style="margin-left: 8px" type="info" icon="download" @click="ExportWorkPieceLogYield2()">
+          瀵煎嚭Excel</a-button
+        >
+      </div>
+      <a-table
+        :columns="columns"
+        :dataSource="data"
+        :pagination="pages"
+        :rowClassName="getRowBackGround"
+        :rowKey="(record) => record.id"
+        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+      >
+        <span slot="time" slot-scope="text">
+          <span v-if="text">{{ moment(moment(text)).format('YYYY-MM-DD HH:mm') }}</span>
+          <span v-else>{{ text }}</span>
+        </span>
+      </a-table>
+    </a-card>
+    <edit-form
+      ref="editRef"
+      :selectedRows="selectedRows"
+      @refresh="getData"
+      :processSelectData="ProcessSelectData"
+    ></edit-form>
+  </div>
+</template>
+<script>
+// 鍦ㄥ埗鍝佺洃鎺�
+import { STable, XCard } from '@/components'
+import { downloadFile,getThisWeekRange } from '@/utils/util'
+import moment from 'moment'
+import { QueryWorkPieceLogYield, exportWorkPieceLogYield } from '@/api/modular/main/WorkPieceInfoManage'
+import editForm from './editForm.vue'
+// 鑾峰彇璁惧涓嬫媺妗嗘暟鎹�
+import { getEquipmentName } from '@/api/modular/main/EquipmentBaseInfoManage'
+export default {
+  components: {
+    STable,
+    XCard,
+    editForm
+  },
+  data() {
+    return {
+      gutter: 36,
+      colMd: 6,
+      colSm: 18,
+      colMd2: 10,
+      colSm2: 24,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 8 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 15 }
+      },
+      advanced: false, // 楂樼骇鎼滅储 灞曞紑/鍏抽棴
+      queryParam: {
+        dates:[],
+      },
+      columns: [
+        {
+          title: '搴忓彿',
+          dataIndex: 'index',
+          key: 'index',
+          align: 'center',
+          customRender: (text, record, index) => `${index + 1}`
+        },
+        //  {
+        //   title: '褰撳墠璁惧',
+        //   align: 'center',
+        //   sorter: true,
+        //   dataIndex: 'equipmentName'
+        // },
+        {
+          title: '褰撳墠宸ュ簭',
+          align: 'center',
+          sorter: true,
+          dataIndex: 'workingProcedure'
+        },
+        {
+          title: '宸ヤ欢鍙�',
+          align: 'center',
+          sorter: true,
+          dataIndex: 'workPieceID'
+        },
+        {
+          title: '澶囨敞',
+          align: 'center',
+          sorter: true,
+          dataIndex: 'remarks'
+        },
+        {
+          title: '鍒涘缓浜�',
+          align: 'center',
+          sorter: true,
+          dataIndex: 'createdUserName'
+        },
+        {
+          title: '鍒涘缓鏃堕棿',
+          align: 'center',
+          sorter: true,
+          dataIndex: 'createdTime'
+        },
+      ],
+      data: [],
+      selectedRowKeys: [],
+      selectedRows: [],
+      // 璁惧涓嬫媺妗嗘暟鎹�
+      equitypeData: [],
+      // 宸ュ簭涓嬫媺妗嗘暟鎹�
+      WorkPieceSelectData: [],
+      // 璐ㄩ噺鐘舵�佷笅鎷夋鏁版嵁
+      QualityStateSelectData: [],
+      pages: {
+        current: 1,
+        pageSize: 10,
+        total: 0,
+        showTotal: (total, range) => `${range[0]}-${range[1]}鍏�${total}鏉,
+        showSizeChanger: true,
+        pageSizeOptions: ['10', '20', '30', '40'],
+        onChange: this.getData,
+        onShowSizeChange: this.showSizeChange
+      }
+    }
+  },
+  created() {
+    this.getEquipmentName()
+    this.initData();
+    this.getData()
+    this.ProcessSelectData = this.$options.filters['dictData']('process_type')
+    this.QualityStateSelectData = this.$options.filters['dictData']('quality_state')
+  },
+  methods: {
+    initData(){
+      this.queryParam.dates = [];
+      this.queryParam.dates = getThisWeekRange();
+    },
+     //閲嶇疆
+    resetQueryData(){
+      this.queryParam = { dates:[] }
+      this.initData();
+    },
+    getRowBackGround(record) {
+      switch (
+        record.cololType // 杩欓噷鏍规嵁鏉′欢鏀瑰彉琛ㄦ牸鑳屾櫙鑹�
+      ) {
+        case 1:
+          return 'table-color-yellow'
+        case 2:
+          return 'table-color-green'
+        case 3:
+          return 'table-color-red'
+        case 4:
+          return 'table-color-blue'
+        case 5:
+          return 'table-color-gray'
+      }
+    },
+    async getData(pageNo) {
+      if (pageNo) this.pages.current = pageNo
+      this.queryParam.pageNo = this.pages.current
+      this.queryParam.pageSize = this.pages.pageSize
+      try {
+        const { data } = await QueryWorkPieceLogYield(this.switchingDate())
+        this.data = data.rows
+        this.pages.total = data.totalRows
+      } catch (error) {
+        console.log(error)
+      }
+    },
+
+    // 琛ㄦ牸鏄剧ず鏁版嵁鏉℃暟鏀瑰彉
+    showSizeChange(current, size) {
+      this.pages.pageSize = size
+      this.getData(1)
+    },
+    showEditModal() {
+      this.$refs.editRef.visible = true
+    },
+    moment,
+    /**
+     * 鏌ヨ鍙傛暟缁勮
+     */
+     switchingDate() {
+      const dates = this.queryParam.dates
+      if (dates != null) {
+        this.queryParam.startTimeBeginTime = moment(dates[0]).format('YYYY-MM-DD HH:mm')
+        this.queryParam.startTimeEndTime = moment(dates[1]).format('YYYY-MM-DD HH:mm')
+        if (dates.length < 1) {
+          delete this.queryParam.startTimeBeginTime
+          delete this.queryParam.startTimeEndTime
+        }
+      }
+      const obj = JSON.parse(JSON.stringify(this.queryParam))
+      return obj
+    },
+    ExportWorkPieceLogYield2() {
+      this.cardLoading = true
+      exportWorkPieceLogYield(this.queryParam)
+        .then((res) => {
+          this.cardLoading = false
+          downloadFile(res)
+        })
+        .catch((err) => {
+          this.cardLoading = false
+          console.info(err)
+          this.$message.error('涓嬭浇閿欒锛氳幏鍙栨枃浠舵祦閿欒' + err)
+        })
+    },
+    getEquipmentName() {
+      getEquipmentName().then((res) => {
+        this.equitypeData = res.data
+      })
+    },
+    toggleAdvanced() {
+      this.advanced = !this.advanced
+    },
+    onSelectChange(selectedRowKeys, selectedRows) {
+      this.selectedRowKeys = selectedRowKeys
+      this.selectedRows = selectedRows
+    },
+    // 璁惧鏌ヨ妗嗙瓫閫�
+    filterOption(input, option) {
+      return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+    }
+  }
+}
+</script>
+<style lang="less" >
+.table-operator {
+  margin-bottom: 18px;
+}
+button {
+  margin-right: 8px;
+}
+
+.table-color-yellow{
+  background-color: rgb(202, 202, 86);
+}
+
+.table-color-green{
+  background-color: rgb(147, 228, 147);
+}
+
+.table-color-red{
+  background-color: rgb(236, 157, 157);
+}
+
+.table-color-blue{
+  background-color: rgb(156, 156, 231);
+}
+
+.table-color-gray{
+  background-color: rgb(181, 172, 172);
+}
+</style>
diff --git a/yiqi_iwara-scada-web/src/views/main/WorkPieceOutbound/index.vue b/yiqi_iwara-scada-web/src/views/main/WorkPieceOutbound/index.vue
index a332b98..2ef6304 100644
--- a/yiqi_iwara-scada-web/src/views/main/WorkPieceOutbound/index.vue
+++ b/yiqi_iwara-scada-web/src/views/main/WorkPieceOutbound/index.vue
@@ -10,8 +10,8 @@
               </a-form-item>
             </a-col>
             <a-col :md="colMd" :sm="colSm">
-              <a-form-item label="OP80鎴愬搧鐮�">
-                <a-input v-model="queryParam.oP80NewCode" allow-clear placeholder="璇疯緭鍏P80鎴愬搧鐮�" />
+              <a-form-item label="鎴愬搧鐮�">
+                <a-input v-model="queryParam.oP80NewCode" allow-clear placeholder="璇疯緭鍏ユ垚鍝佺爜" />
               </a-form-item>
             </a-col>
             <a-col :md="colMd" :sm="colSm">
@@ -102,6 +102,24 @@
             align: 'center',
             customRender: (text, record, index) => `${index + 1}`
           },
+          {
+          title: '鎴愬搧鐮�',
+          align: 'center',
+          sorter: true,
+          dataIndex: 'oP80NewCode'
+        },
+        {
+          title: '闃舵',
+          align: 'center',
+          sorter: true,
+          dataIndex: 'unLineStageName'
+        },
+        {
+          title: '灏忚溅鐮�',
+          align: 'center',
+          sorter: true,
+          dataIndex: 'carNo'
+        },
         {
           title: '宸ヤ欢鍙�',
           align: 'center',
@@ -109,10 +127,16 @@
           dataIndex: 'workPieceID'
         },
         {
-          title: 'OP80鎴愬搧鐮�',
+          title: '涓嬬嚎鏃堕棿',
           align: 'center',
           sorter: true,
-          dataIndex: 'oP80NewCode'
+          dataIndex: 'workPieceUnLineTime'
+        },
+        {
+          title: '涓嬬嚎浜�',
+          align: 'center',
+          sorter: true,
+          dataIndex: 'workPieceUnLineUserName'
         },
         {
           title: '鍑哄簱鏃堕棿',
diff --git a/yiqi_iwara-scada-web/src/views/main/WorkPieceProcess/index.vue b/yiqi_iwara-scada-web/src/views/main/WorkPieceProcess/index.vue
index 5c2cda5..efb3565 100644
--- a/yiqi_iwara-scada-web/src/views/main/WorkPieceProcess/index.vue
+++ b/yiqi_iwara-scada-web/src/views/main/WorkPieceProcess/index.vue
@@ -196,7 +196,7 @@
         total: 0,
         showSizeChanger: true,
         showTotal: (total, range) => `${range[0]}-${range[1]}鍏�${total}鏉,
-        pageSizeOptions: ['10', '20', '30', '40'],
+        pageSizeOptions: ['10', '20', '30', '40','50','100','200','300','400','500',],
         onChange: this.getData,
         onShowSizeChange: this.pageSizeChange
       },
@@ -227,6 +227,12 @@
           dataIndex: 'qualityStateName'
         },
         {
+          title: '涓嶅悎鏍煎師鍥�',
+          align: 'center',
+          sorter: true,
+          dataIndex: 'qualityNoOkReason'
+        },
+        {
           title: '鎴愬搧鐮�',
           align: 'center',
           sorter: true,

--
Gitblit v1.9.3