yangfeng
2024-03-27 b265f78311f5bb0769f32a31f7006cc787bd2f53
质检相关报工页面新增、接口联调
1个文件已添加
5个文件已修改
305 ■■■■■ 已修改文件
src/api/index.ts 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/task.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/components/ReportProductionModal.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/components/ReportProductionModal1.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/components/TaskControl.vue 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vite.config.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.ts
@@ -290,3 +290,53 @@
    data: params
  })
}
export interface qualityParams {
  reportAmount: number
  workOrderProcedureID: number
  workerID: string
  workerName: string
}
/**
 * 看板质检
 */
export function bulletinQualityInspection(params: qualityParams) {
  return request({
    url: '/api-s/v1/reportWork/bulletinQualityInspection',
    method: 'post',
    data: params
  })
}
export interface getQualityParams {
  workerId: string
  procedureId: string
}
/**
 * 看板获取质检信息
 */
export function getQualityInspection(params: getQualityParams) {
  return request({
    url: '/api-s/v1/reportWork/bulletinGetQualityInspection',
    method: 'post',
    data: params
  })
}
export interface bulletinReportParams {
  reportAmount: number
  workOrderProcedureID: number
  workerID: string
  workerName: string
  ids: number[]
}
/**
 * 看板报工
 */
export function bulletinReport(params: bulletinReportParams) {
  return request({
    url: '/api-s/v1/reportWork/bulletinReport',
    method: 'post',
    data: params
  })
}
src/api/task.ts
@@ -73,6 +73,7 @@
  CurrentProcedureIndex: number
  CanStarted: boolean
  ProcedureModel: ProcedureModel
  ShowCheck: boolean
}
export interface Material {
  materialId: string
src/views/dashboard/components/ReportProductionModal.vue
@@ -1,8 +1,9 @@
<template>
  <div class="report-production-modal">
    <BaseModal v-model="modelData" :wider="true" @close="closeModal">
      <template #title> 生产报工 </template>
      <template #title> {{ modelTitle }} </template>
      <div class="report-content">
        <div v-if="modelTitle == '提交质检'" class="r-c-title">数量:</div>
        <div class="numbers">{{ inputNumber }}</div>
        <div class="buttons">
          <BigButton
@@ -24,8 +25,9 @@
import { useVModel } from '@vueuse/core'
import BigButton from './BigButton.vue'
import { ref, watch } from 'vue'
const props = withDefaults(defineProps<{ modelValue: boolean; amount?: number }>(), {
const props = withDefaults(defineProps<{ modelValue: boolean; modelTitle: string; amount?: number }>(), {
  modelValue: false,
  modelTitle: '',
  amount: 0
})
const emit = defineEmits<{
@@ -82,6 +84,14 @@
.report-content {
  padding: 60px 0 0 230px;
  height: 520px;
  position: relative;
  .r-c-title {
    position: absolute;
    top: 70px;
    left: 110px;
    font-size: 26px;
    color: #fff;
  }
}
.numbers {
  height: 80px;
src/views/dashboard/components/ReportProductionModal1.vue
New file
@@ -0,0 +1,126 @@
<template>
  <div class="report-production-modal">
    <BaseModal v-model="modelData" :wider="true" @close="closeModal">
      <template #title> {{ modelTitle }} </template>
      <div class="report-content">
        <div class="r-c-top">
          <div class="t-common">
            合格:<span style="color: #00ff00">{{ passAmount }}</span>
          </div>
          <div class="t-common">
            返工:<span style="color: #ff9900">{{ reworkAmount }}</span>
          </div>
          <div class="t-common">
            报废:<span style="color: #ff0000">{{ scrappedAmount }}</span>
          </div>
        </div>
        <div class="r-c-middle">
          <div>当前可报工数量</div>
          <div>{{ passAmount }}</div>
        </div>
        <div class="r-c-bottom">
          <BigButton class="btn" :bg-color="'#f44336'" :color="'#ffffff'" @click="closeModal">{{ '取消' }}</BigButton>
          <BigButton class="btn" :bg-color="'#2196F3'" :color="'#ffffff'" @click="clickBtn">{{ '报工' }}</BigButton>
        </div>
      </div>
    </BaseModal>
  </div>
</template>
<script setup lang="ts">
import { useVModel } from '@vueuse/core'
import BigButton from './BigButton.vue'
import { ref, watch } from 'vue'
const props = withDefaults(
  defineProps<{
    modelValue: boolean
    modelTitle: string
    amount?: number
    passAmount: number
    reworkAmount: number
    scrappedAmount: number
  }>(),
  {
    modelValue: false,
    modelTitle: '',
    amount: 0,
    passAmount: 0, // 合格
    reworkAmount: 0, // 返工
    scrappedAmount: 0 // 报废
  }
)
const emit = defineEmits<{
  'update:modelValue': [show: boolean]
  submit: [inputNumber: number]
  close: []
}>()
const modelData = useVModel(props, 'modelValue', emit)
function closeModal() {
  emit('close')
}
const inputNumber = ref('')
function clickBtn() {
  emit('submit', +inputNumber.value)
}
watch(modelData, () => {
  if (modelData.value) {
    inputNumber.value = (props.amount ?? '').toString()
  }
})
</script>
<style scoped lang="scss">
.report-content {
  padding: 60px 80px 0;
  height: 520px;
  position: relative;
  .r-c-top {
    display: flex;
    font-size: 24px;
    .t-common {
      width: 33%;
      color: #fff;
      margin-left: 30px;
    }
  }
  .r-c-middle {
    font-size: 30px;
    font-weight: 700;
    color: #fff;
    text-align: center;
    margin-top: 120px;
  }
  .r-c-bottom {
    position: absolute;
    bottom: -20px;
    right: 60px;
    .btn {
      margin-right: 20px;
      // margin-bottom: 20px;
      width: 120px;
      height: 60px;
    }
  }
}
.numbers {
  height: 80px;
  border: 1px solid #fff;
  padding: 0 6px;
  width: 400px;
  margin-bottom: 20px;
  line-height: 80px;
  text-align: right;
  font-size: 40px;
  color: #fff;
}
.buttons {
  width: 420px;
}
.btn {
  margin-right: 20px;
  margin-bottom: 20px;
  width: 120px;
  height: 70px;
}
</style>
src/views/dashboard/components/TaskControl.vue
@@ -22,7 +22,20 @@
      </BigButton>
      <template v-if="task?.Procedure.Status === 2 || task?.Procedure.Status === 3">
        <BigButton class="btn" bg-color="#ff9933" :disabled="task?.Procedure.Status === 3">打印</BigButton>
        <BigButton class="btn" bg-color="#00cc33" :disabled="task?.Procedure.Status === 3" @click="openReportModal">
        <BigButton
          v-if="task?.ShowCheck"
          class="btn"
          bg-color="#00cc33"
          :disabled="task?.Procedure.Status === 3"
          @click="openQualityModal"
          >质检</BigButton
        >
        <BigButton
          class="btn"
          :bg-color="task?.ShowCheck ? '#0066ff' : '#00cc33'"
          :disabled="task?.Procedure.Status === 3"
          @click="openReportModal"
        >
          报工
        </BigButton>
        <el-popconfirm
@@ -47,10 +60,21 @@
  <TaskControlModal v-model="showTaskControlModal" :task="task" @produce-start="onProduceStart"></TaskControlModal>
  <ReportProductionModal
    v-model="showReportModal"
    :model-title="modelTitle"
    :amount="plcInfo?.finishNumber ?? 0"
    @close="showReportModal = false"
    @submit="onReportProduction"
  ></ReportProductionModal>
  <ReportProductionModal1
    v-model="showReportModal1"
    :model-title="modelTitle"
    :amount="plcInfo?.finishNumber ?? 0"
    :pass-amount="passAmount"
    :rework-amount="reworkAmount"
    :scrapped-amount="scrappedAmount"
    @close="showReportModal1 = false"
    @submit="onReportCheck"
  ></ReportProductionModal1>
</template>
<script setup lang="ts">
import type { Task, Worker } from '@/api/task'
@@ -59,11 +83,14 @@
import { useDateFormat } from '@vueuse/core'
import TaskControlModal from '@/views/dashboard/components/TaskControlModal.vue'
import { CircleCloseFilled } from '@element-plus/icons-vue'
import { apiReportWork, procedureUpdate } from '@/api'
import { apiReportWork, procedureUpdate, bulletinReport, bulletinQualityInspection, getQualityInspection } from '@/api'
import { ElMessage } from 'element-plus'
import ReportProductionModal from '@/views/dashboard/components/ReportProductionModal.vue'
import ReportProductionModal1 from '@/views/dashboard/components/ReportProductionModal1.vue'
import { usePLCStore } from '@/stores/plc'
import { storeToRefs } from 'pinia'
import { log } from 'console'
import { isDoStatement } from 'typescript'
const props = defineProps<{
  task?: Task
@@ -76,6 +103,10 @@
}>()
const showTaskControlModal = ref(false)
const modelTitle = ref('')
const passAmount = ref(0)
const reworkAmount = ref(0)
const scrappedAmount = ref(0)
/**
 * 开始生产
@@ -151,6 +182,9 @@
const { plcInfo } = storeToRefs(plcStore)
// 报工
const showReportModal = ref(false)
// 报工
const showReportModal1 = ref(false)
const reprotIds = ref([])
function openReportModal() {
  // 有人员才可以报工
  if (!workers.value || workers.value.length == 0) {
@@ -179,6 +213,38 @@
  }
  if (workers.value[0].workerId) {
    modelTitle.value = '生产报工'
    if (task?.value?.ShowCheck) {
      getQualityInspection({
        procedureId: task.value?.Procedure.ID,
        workerId: workers.value[0].workerId
      }).then((res) => {
        console.log(res, '999999')
        passAmount.value = res.data.passAmount
        reworkAmount.value = res.data.reworkAmount
        scrappedAmount.value = res.data.scrappedAmount
        reprotIds.value = res.data.ids
        showReportModal1.value = true
      })
    } else {
      showReportModal.value = true
    }
  }
}
// 质检
function openQualityModal() {
  // 有人员才可以报工
  if (!workers.value || workers.value.length == 0) {
    ElMessage({
      message: '没有人员信息不允许质检!',
      type: 'error',
      duration: 3000
    })
    return true
  }
  if (workers.value[0].workerId) {
    modelTitle.value = '提交质检'
    showReportModal.value = true
  }
}
@@ -193,7 +259,9 @@
  }
  // 有人员才可以报工
  if (workers.value[0].workerId) {
    apiReportWork({
    let requestUrl = task?.value.ShowCheck ? bulletinQualityInspection : apiReportWork
    let tipStr = task?.value.ShowCheck ? '质检' : '报工'
    requestUrl({
      workOrderProcedureID: Number(task.value?.Procedure.ID),
      reportAmount: amount,
      workerID: workers.value[0].workerId,
@@ -202,6 +270,44 @@
      .then((res) => {
        if (res.code === 200) {
          ElMessage({
            message: `${tipStr}成功`,
            type: 'success',
            duration: 2000
          })
          showReportModal.value = false
        } else {
          ElMessage({
            message: `${tipStr}失败`,
            type: 'error',
            duration: 3000
          })
        }
      })
      .catch((err) => {
        console.error(err)
      })
  }
}
/**
 * 质检后的上报加工数
 * @param amount 加工数
 */
function onReportCheck(amount: number) {
  if (!task?.value) {
    return
  }
  // 有人员才可以报工
  if (workers.value[0].workerId) {
    bulletinReport({
      workOrderProcedureID: Number(task.value?.Procedure.ID),
      reportAmount: amount,
      workerID: workers.value[0].workerId,
      workerName: workers.value[0].workerName,
      ids: reprotIds
    })
      .then((res) => {
        if (res.code === 200) {
          ElMessage({
            message: '报工成功',
            type: 'success',
            duration: 2000
vite.config.ts
@@ -18,7 +18,7 @@
    proxy: {
      '/api-s/': {
        // http://192.168.20.119:8003 http://192.168.20.25:7010
        target: 'http://192.168.20.120:9081',
        target: 'http://192.168.20.119:9081',
        ws: true,
        changeOrigin: true
      },