| | |
| | | <div class="modal-content"> |
| | | <template v-if="['初始化', '计时中', '准备生产', '下发参数中'].includes(state.value as string)"> |
| | | <div class="content-title"> |
| | | <div class="content-title-item">当前任务:{{ task?.Procedure.procedure.procedureName || '' }}</div> |
| | | <div class="content-title-item">当前任务:{{ task?.Procedure?.procedure?.procedureName || '' }}</div> |
| | | <div class="content-title-item"> |
| | | 生产数量: |
| | | <div class="leaf-shape"> |
| | |
| | | <div class="info-item">产品名称:{{ task.Order.productName || '' }}</div> |
| | | <div class="info-item">数量:{{ task.Order.amount || 0 }}{{ task.Order.unit }}</div> |
| | | <div class="info-item">交货日期:{{ task.Order.deliverDate || '' }}</div> |
| | | <div class="info-item">工时: {{ task.Procedure.procedure.workHours || '' }}</div> |
| | | <div class="info-item">工时: {{ task?.Procedure?.procedure?.workHours || '' }}</div> |
| | | <div class="info-item"> |
| | | 计划时间: {{ formatDate(task.Procedure.startTime) || '' }} |
| | | 计划时间: {{ formatDate(task?.Procedure?.startTime) || '' }} |
| | | - |
| | | {{ formatDate(task.Procedure.endTime) }} |
| | | {{ formatDate(task?.Procedure?.endTime) }} |
| | | </div> |
| | | |
| | | <div class="info-item">客户名称:{{ task.Order.customer || '' }}</div> |
| | |
| | | |
| | | <div class="info-item-two"> |
| | | <div style="color: #4efefa; font-size: 18px; margin-bottom: 10px; margin-top: 20px">工艺参数</div> |
| | | <!-- 未获取到工艺参数, 且当前设备允许在没有工艺参数的情况下生产, 则提示--> |
| | | <div v-if="!craftParams?.length && currentDeviceAllowNoParams" class="info-item info-item-two"> |
| | | 未获取到工艺参数, 请手动设置或在云端工艺模型中上传 |
| | | </div> |
| | | <div v-for="(item, index) in craftParams" :key="index" class="info-item info-item-two"> |
| | | {{ item.Key }}:{{ item.Value || '' }} |
| | | </div> |
| | |
| | | </template> |
| | | |
| | | <!-- 只有获取到工艺参数才可以进行操作--> |
| | | <template v-if="getCraftParamsTip"> |
| | | <template v-if="getCraftParamsTip && !currentDeviceAllowNoParams"> |
| | | <div class="content-tips"> |
| | | <div class="craft-params-error"> |
| | | <div class="error-icon"> |
| | |
| | | </template> |
| | | </div> |
| | | <template #footer> |
| | | <template v-if="getCraftParamsTip"> |
| | | <template v-if="getCraftParamsTip && !currentDeviceAllowNoParams"> |
| | | <div class="btn"> |
| | | <BigButton bg-color="#4765c0" @click="closeModal"> 关闭 </BigButton> |
| | | </div> |
| | |
| | | import { ref, toRefs, watch } from 'vue' |
| | | import BigButton from '@/views/dashboard/components/BigButton.vue' |
| | | import { CHANNEL_NAME_MAP } from '@/common/constants' |
| | | import { getCraftParams, sendProcessParams } from '@/api' |
| | | import { procedureUpdate, sendProcessParams } from '@/api' |
| | | import { useCountDown } from '@/common/composable' |
| | | import { storeToRefs } from 'pinia' |
| | | import { useTasksStore } from '@/stores/tasks' |
| | | import { createMachine } from 'xstate' |
| | | import { useMachine } from '@xstate/vue' |
| | | import { CircleCloseFilled, Loading, SuccessFilled } from '@element-plus/icons-vue' |
| | | import { useDevicesStore } from '@/stores/devices' |
| | | |
| | | export interface TaskControlModalProps { |
| | | task?: Task |
| | |
| | | const craftParams = ref<CraftParam[]>() |
| | | // 获取工艺参数结果信息 |
| | | const getCraftParamsTip = ref('') |
| | | |
| | | // 当前设备若没有工艺参数是否允许下发 |
| | | const { currentDeviceAllowNoParams } = storeToRefs(useDevicesStore()) |
| | | /** |
| | | * 获取当前展示的任务的工艺参数 |
| | | */ |
| | |
| | | if (taskId) { |
| | | craftParams.value = [] |
| | | getCraftParamsTip.value = '' |
| | | getCraftParams({ id: taskId }).then( |
| | | (res) => { |
| | | craftParams.value = res.data.Params ?? [] |
| | | getCraftParamsTip.value = '' |
| | | }, |
| | | (err) => { |
| | | console.error(err) |
| | | craftParams.value = [] |
| | | getCraftParamsTip.value = '获取工艺参数失败!' |
| | | } |
| | | ) |
| | | } |
| | | } |
| | | |
| | |
| | | const safeProduce = ref('') |
| | | watch(modelData, () => { |
| | | if (modelData.value) { |
| | | safeProduce.value = channels?.value?.[task.value.Channel]?.Prompt?.safeProduce ?? '' |
| | | safeProduce.value = channels?.value?.[task?.value?.Channel ?? 0]?.Prompt?.safeProduce ?? '' |
| | | } |
| | | }) |
| | | |
| | |
| | | function startProduce() { |
| | | send('开始生产') |
| | | |
| | | sendProcessParams({ |
| | | procedureId: task.value.Procedure.ID |
| | | }) |
| | | .then( |
| | | (res) => { |
| | | deliveryTip.value = '下发成功' |
| | | send('成功') |
| | | countdown3s.startCountdown() |
| | | }, |
| | | (err) => { |
| | | console.error(err) |
| | | deliveryTip.value = err.msg ? err.msg : '抱歉,工序下发失败!' |
| | | send('失败') |
| | | } |
| | | ) |
| | | .finally(() => {}) |
| | | procedureUpdate({ |
| | | isFinish: false, |
| | | isProcessing: true, |
| | | workOrderProcedureID: Number(task!.value!.Procedure.ID) |
| | | }).then( |
| | | (res) => { |
| | | deliveryTip.value = '下发成功' |
| | | send('成功') |
| | | countdown3s.startCountdown() |
| | | }, |
| | | (err) => { |
| | | console.error(err) |
| | | deliveryTip.value = err.msg ? err.msg : '抱歉,工序下发失败!' |
| | | send('失败') |
| | | } |
| | | ) |
| | | // sendProcessParams({ |
| | | // procedureId: task!.value!.Procedure.ID |
| | | // }) |
| | | // .then( |
| | | // (res) => { |
| | | // deliveryTip.value = '下发成功' |
| | | // send('成功') |
| | | // countdown3s.startCountdown() |
| | | // }, |
| | | // (err) => { |
| | | // console.error(err) |
| | | // deliveryTip.value = err.msg ? err.msg : '抱歉,工序下发失败!' |
| | | // send('失败') |
| | | // } |
| | | // ) |
| | | // .finally(() => {}) |
| | | } |
| | | |
| | | /** |
| | |
| | | .btn { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-around; |
| | | justify-content: center; |
| | | & > button { |
| | | margin-right: 20px; |
| | | &:last-child { |
| | | margin-right: 0; |
| | | } |
| | | } |
| | | } |
| | | .content-title { |
| | | display: flex; |