schangxiang@126.com
2024-08-31 8b65642d7478407e03f751f2d5d8756b825969a2
优化
已添加2个文件
已修改4个文件
525 ■■■■■ 文件已修改
yiqi_iwara-scada-web/src/api/modular/main/WorkPieceInfoManage.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_iwara-scada-web/src/views/main/WorkPieceInfoYield/index.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_iwara-scada-web/src/views/main/WorkPieceLogYield/editForm.vue 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_iwara-scada-web/src/views/main/WorkPieceLogYield/index.vue 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_iwara-scada-web/src/views/main/WorkPieceOutbound/index.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_iwara-scada-web/src/views/main/WorkPieceProcess/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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'
  })
}
/**
 * æŸ¥è¯¢åœ¨åˆ¶å“ç›‘控 äº§å“ç»´åº¦æŸ¥è¯¢
 *
yiqi_iwara-scada-web/src/views/main/WorkPieceInfoYield/index.vue
@@ -117,7 +117,8 @@
      },
      advanced: false, // é«˜çº§æœç´¢ å±•å¼€/关闭
      queryParam: {
        dates:[]
        dates:[],
        qualityState:1,//只查询合格的 ï¼ˆ1合格 2不合格 3 ç–‘似)【Editby shaocx,2024-08-26】
      },
      columns: [
        {
@@ -178,6 +179,7 @@
    initData(){
      this.queryParam.dates = [];
      this.queryParam.dates = getThisWeekRange();
      this.queryParam.qualityState = 1;//只查询合格的 ï¼ˆ1合格 2不合格 3 ç–‘似)【Editby shaocx,2024-08-26】
    },
     //重置
    resetQueryData(){
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>
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>
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="请输入OP80成品码" />
              <a-form-item label="成品码">
                <a-input v-model="queryParam.oP80NewCode" allow-clear placeholder="请输入成品码" />
              </a-form-item>
            </a-col>
            <a-col :md="colMd" :sm="colSm">
@@ -103,16 +103,40 @@
            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',
          sorter: true,
          dataIndex: 'workPieceID'
        },
        {
          title: 'OP80成品码',
          title: '下线时间',
          align: 'center',
          sorter: true,
          dataIndex: 'oP80NewCode'
          dataIndex: 'workPieceUnLineTime'
        },
        {
          title: '下线人',
          align: 'center',
          sorter: true,
          dataIndex: 'workPieceUnLineUserName'
        },
        {
          title: '出库时间',
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,