From d75c40cd7e8ab784b5d9caa289e22f2e7a9b6ea7 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周二, 11 6月 2024 15:04:55 +0800
Subject: [PATCH] 工序产量查询

---
 iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js    |   15 +
 iwara-scada-web/src/views/main/WorkPieceInfoYield/index.vue    |  300 +++++++++++++++++++++++++++++++++++++
 iwara-scada-web/src/views/main/WorkPieceInfoYield/editForm.vue |  137 +++++++++++++++++
 3 files changed, 452 insertions(+), 0 deletions(-)

diff --git a/iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js b/iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js
index 5893a1e..b060a0a 100644
--- a/iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js
+++ b/iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js
@@ -35,6 +35,21 @@
   })
 }
 
+export function WorkPieceInfoYieldPage (parameter) {
+  return axios({
+    url: '/WorkPieceProcess/queryYield',
+    method: 'get',
+    params: parameter
+  })
+}
+export function WorkPieceInfoYieldToExcel1 (parameter) {
+  return axios({
+    url: '/WorkPieceProcess/exportYield',
+    method: 'get',
+    params: parameter,
+    responseType: 'blob'
+  })
+}
 /**
  * 鏌ヨ鍦ㄥ埗鍝佺洃鎺� 浜у搧缁村害鏌ヨ
  *
diff --git a/iwara-scada-web/src/views/main/WorkPieceInfoYield/editForm.vue b/iwara-scada-web/src/views/main/WorkPieceInfoYield/editForm.vue
new file mode 100644
index 0000000..0573682
--- /dev/null
+++ b/iwara-scada-web/src/views/main/WorkPieceInfoYield/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/iwara-scada-web/src/views/main/WorkPieceInfoYield/index.vue b/iwara-scada-web/src/views/main/WorkPieceInfoYield/index.vue
new file mode 100644
index 0000000..88a20c4
--- /dev/null
+++ b/iwara-scada-web/src/views/main/WorkPieceInfoYield/index.vue
@@ -0,0 +1,300 @@
+锘�<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-select
+                    allow-clear
+                    style="width: 100%"
+                    v-model="queryParam.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-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="WorkPieceInfoYieldToExcel1()">
+          瀵煎嚭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 { WorkPieceInfoYieldPage, WorkPieceInfoYieldToExcel1 } 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: 'workingProcedureCurrent'
+        },
+        {
+          title: '浜ч噺',
+          align: 'center',
+          sorter: true,
+          dataIndex: 'yieldCount'
+        },
+      ],
+      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 WorkPieceInfoYieldPage(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
+    },
+    WorkPieceInfoYieldToExcel1() {
+      this.cardLoading = true
+      WorkPieceInfoYieldToExcel1(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>

--
Gitblit v1.9.3