fix: MOM
1.修改物料弹框的SIP与SOP改为中文
| | |
| | | } from "#/api/mes/md/item"; |
| | | import { $t } from "#/locales"; |
| | | import { MdItemTypeTree } from "#/views/mes/md/item/type/components"; |
| | | import { PrinterLabel } from "#/views/wls/barcode/components"; |
| | | // import { PrinterLabel } from "#/views/wls/barcode/components"; |
| | | |
| | | import { useGridColumns, useGridFormSchema } from "./data"; |
| | | import Form from "./modules/form.vue"; |
| | |
| | | }, |
| | | }, |
| | | ]" /> |
| | | <PrinterLabel :biz-id="row.id" |
| | | <!-- <PrinterLabel :biz-id="row.id" |
| | | :biz-code="row.code" |
| | | biz-type="ITEM" /> |
| | | biz-type="ITEM" /> --> |
| | | </div> |
| | | </template> |
| | | </Grid> |
| | |
| | | <Tabs.TabPane key="substitute" tab="替代品"> |
| | | <Empty description="替代品(待实现)" /> |
| | | </Tabs.TabPane> |
| | | <Tabs.TabPane key="sip" tab="SIP"> |
| | | <Tabs.TabPane key="sip" tab="检验指导书(SIP)"> |
| | | <ProductSipForm :form-type="formType" :item-id="formData.id" /> |
| | | </Tabs.TabPane> |
| | | <Tabs.TabPane key="sop" tab="SOP"> |
| | | <Tabs.TabPane key="sop" tab="作业指导书(SOP)"> |
| | | <ProductSopForm :form-type="formType" :item-id="formData.id" /> |
| | | </Tabs.TabPane> |
| | | </Tabs> |
| | |
| | | ); |
| | | |
| | | const isReadOnly = computed(() => props.formType === 'detail'); // 是否只读 |
| | | const title = computed(() => props.kind); // 当前媒体类型标题 |
| | | const title = computed(() => |
| | | props.kind === 'SIP' ? '检验指导书(SIP)' : '作业指导书(SOP)', |
| | | ); |
| | | |
| | | /** 将完整 URL 转为相对路径,确保走前端代理 */ |
| | | function resolveImageUrl(url?: string): string { |
| | |
| | | import { ref } from 'vue'; |
| | | |
| | | import { Page, useVbenModal } from '@vben/common-ui'; |
| | | import { BarcodeBizTypeEnum } from '@vben/constants'; |
| | | // import { BarcodeBizTypeEnum } from '@vben/constants'; |
| | | import { downloadFileFromBlobPart } from '@vben/utils'; |
| | | |
| | | import { Button, message } from 'ant-design-vue'; |
| | |
| | | getWorkstationPage, |
| | | } from '#/api/mes/md/workstation'; |
| | | import { $t } from '#/locales'; |
| | | import { BarcodeDetail } from '#/views/wls/barcode/components'; |
| | | // import { BarcodeDetail } from '#/views/wls/barcode/components'; |
| | | |
| | | import { useGridColumns, useGridFormSchema } from './data'; |
| | | import Form from './modules/form.vue'; |
| | | |
| | | const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 条码详情弹窗 |
| | | // const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 条码详情弹窗 |
| | | |
| | | const [FormModal, formModalApi] = useVbenModal({ |
| | | connectedComponent: Form, |
| | |
| | | } |
| | | |
| | | /** 查看工作站条码 */ |
| | | function handleBarcode(row: MesMdWorkstationApi.Workstation) { |
| | | if (!row.id) { |
| | | return; |
| | | } |
| | | barcodeDetailRef.value?.openByBusiness( |
| | | row.id, |
| | | BarcodeBizTypeEnum.WORKSTATION, |
| | | row.code, |
| | | row.name, |
| | | ); |
| | | } |
| | | // function handleBarcode(row: MesMdWorkstationApi.Workstation) { |
| | | // if (!row.id) { |
| | | // return; |
| | | // } |
| | | // barcodeDetailRef.value?.openByBusiness( |
| | | // row.id, |
| | | // BarcodeBizTypeEnum.WORKSTATION, |
| | | // row.code, |
| | | // row.name, |
| | | // ); |
| | | // } |
| | | |
| | | /** 导出工作站 */ |
| | | async function handleExport() { |
| | |
| | | |
| | | <template> |
| | | <Page auto-content-height><FormModal @success="handleRefresh" /> |
| | | <BarcodeDetail ref="barcodeDetailRef" /> |
| | | <!-- <BarcodeDetail ref="barcodeDetailRef" /> --> |
| | | |
| | | <Grid table-title="工作站列表"> |
| | | <template #toolbar-tools> |
| | |
| | | confirm: handleDelete.bind(null, row), |
| | | }, |
| | | }, |
| | | { |
| | | label: '条码', |
| | | type: 'link', |
| | | auth: ['mes:md-workstation:query'], |
| | | onClick: handleBarcode.bind(null, row), |
| | | }, |
| | | // { |
| | | // label: '条码', |
| | | // type: 'link', |
| | | // auth: ['mes:md-workstation:query'], |
| | | // onClick: handleBarcode.bind(null, row), |
| | | // }, |
| | | ]" |
| | | /> |
| | | </template> |
| | |
| | | import { computed, ref } from "vue"; |
| | | |
| | | import { useVbenModal } from "@vben/common-ui"; |
| | | import { BarcodeBizTypeEnum } from "@vben/constants"; |
| | | // import { BarcodeBizTypeEnum } from "@vben/constants"; |
| | | |
| | | import { Button, message, Tabs } from "ant-design-vue"; |
| | | |
| | |
| | | updateWorkstation, |
| | | } from "#/api/mes/md/workstation"; |
| | | import { $t } from "#/locales"; |
| | | import { BarcodeDetail } from "#/views/wls/barcode/components"; |
| | | // import { BarcodeDetail } from "#/views/wls/barcode/components"; |
| | | |
| | | import { useFormSchema } from "../data"; |
| | | import MachineList from "./machine-list.vue"; |
| | |
| | | const formType = ref<FormType>("create"); // 表单模式 |
| | | const subTabsName = ref("machine"); // 当前资源页签 |
| | | const formData = ref<MesMdWorkstationApi.Workstation>(); |
| | | const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 条码详情弹窗 |
| | | // const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 条码详情弹窗 |
| | | |
| | | const isDetail = computed(() => formType.value === "detail"); // 是否查看模式 |
| | | const getTitle = computed(() => { |
| | |
| | | }); |
| | | |
| | | /** 查看工作站条码 */ |
| | | function handleBarcode() { |
| | | if (!formData.value?.id) { |
| | | return; |
| | | } |
| | | barcodeDetailRef.value?.openByBusiness( |
| | | formData.value.id, |
| | | BarcodeBizTypeEnum.WORKSTATION, |
| | | formData.value.code, |
| | | formData.value.name |
| | | ); |
| | | } |
| | | // function handleBarcode() { |
| | | // if (!formData.value?.id) { |
| | | // return; |
| | | // } |
| | | // barcodeDetailRef.value?.openByBusiness( |
| | | // formData.value.id, |
| | | // BarcodeBizTypeEnum.WORKSTATION, |
| | | // formData.value.code, |
| | | // formData.value.name |
| | | // ); |
| | | // } |
| | | |
| | | const [Modal, modalApi] = useVbenModal({ |
| | | async onConfirm() { |
| | |
| | | </Tabs> |
| | | <template #prepend-footer> |
| | | <div class="flex flex-auto items-center"> |
| | | <Button v-if="isDetail && formData?.id" |
| | | <!-- <Button v-if="isDetail && formData?.id" |
| | | type="primary" |
| | | @click="handleBarcode"> |
| | | 查看条码 |
| | | </Button> |
| | | </Button> --> |
| | | </div> |
| | | </template> |
| | | <BarcodeDetail ref="barcodeDetailRef" /> |
| | | <!-- <BarcodeDetail ref="barcodeDetailRef" /> --> |
| | | </Modal> |
| | | </template> |
| | |
| | | import { computed, ref } from "vue"; |
| | | |
| | | import { useVbenModal } from "@vben/common-ui"; |
| | | import { BarcodeBizTypeEnum } from "@vben/constants"; |
| | | // import { BarcodeBizTypeEnum } from "@vben/constants"; |
| | | |
| | | import { Button, message } from "ant-design-vue"; |
| | | |
| | |
| | | updateWorkshop, |
| | | } from "#/api/mes/md/workstation/workshop"; |
| | | import { $t } from "#/locales"; |
| | | import { BarcodeDetail } from "#/views/wls/barcode/components"; |
| | | // import { BarcodeDetail } from "#/views/wls/barcode/components"; |
| | | |
| | | import { useFormSchema } from "../data"; |
| | | |
| | | const emit = defineEmits(["success"]); |
| | | const formType = ref<FormType>("create"); // 表单模式 |
| | | const formData = ref<MesMdWorkshopApi.Workshop>(); |
| | | const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 条码详情弹窗 |
| | | // const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 条码详情弹窗 |
| | | |
| | | const isDetail = computed(() => formType.value === "detail"); // 是否查看模式 |
| | | const getTitle = computed(() => { |
| | |
| | | }); |
| | | |
| | | /** 查看车间条码 */ |
| | | function handleBarcode() { |
| | | if (!formData.value?.id) { |
| | | return; |
| | | } |
| | | barcodeDetailRef.value?.openByBusiness( |
| | | formData.value.id, |
| | | BarcodeBizTypeEnum.WORKSHOP, |
| | | formData.value.code, |
| | | formData.value.name |
| | | ); |
| | | } |
| | | // function handleBarcode() { |
| | | // if (!formData.value?.id) { |
| | | // return; |
| | | // } |
| | | // barcodeDetailRef.value?.openByBusiness( |
| | | // formData.value.id, |
| | | // BarcodeBizTypeEnum.WORKSHOP, |
| | | // formData.value.code, |
| | | // formData.value.name |
| | | // ); |
| | | // } |
| | | |
| | | const [Modal, modalApi] = useVbenModal({ |
| | | async onConfirm() { |
| | |
| | | <template v-if="isDetail && formData?.id" |
| | | #prepend-footer> |
| | | <div class="flex flex-auto items-center"> |
| | | <Button @click="handleBarcode">查看条码</Button> |
| | | <!-- <Button @click="handleBarcode">查看条码</Button> --> |
| | | </div> |
| | | </template> |
| | | </Modal> |
| | | <BarcodeDetail ref="barcodeDetailRef" /> |
| | | <!-- <BarcodeDetail ref="barcodeDetailRef" /> --> |
| | | </template> |
| | |
| | | |
| | | import { Page, useVbenModal } from "@vben/common-ui"; |
| | | import { |
| | | BarcodeBizTypeEnum, |
| | | MesProWorkOrderStatusEnum, |
| | | MesProWorkOrderTypeEnum, |
| | | } from "@vben/constants"; |
| | |
| | | } from "#/api/mes/pro/workorder"; |
| | | import { $t } from "#/locales"; |
| | | import ArchiveDetail from '#/views/mes/pd/archive/modules/detail.vue'; |
| | | import { BarcodeDetail } from '#/views/wls/barcode/components'; |
| | | // import { BarcodeDetail } from '#/views/wls/barcode/components'; |
| | | |
| | | import { useGridColumns, useGridFormSchema } from "./data"; |
| | | import Form from "./modules/form.vue"; |
| | |
| | | }); |
| | | |
| | | const archiveDetailRef = ref<InstanceType<typeof ArchiveDetail>>(); |
| | | const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 条码详情弹窗 |
| | | // const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); // 条码详情弹窗 |
| | | |
| | | /** 刷新表格 */ |
| | | function handleRefresh() { |
| | |
| | | } |
| | | |
| | | /** 查看订单条码 */ |
| | | function handleBarcode(row: MesProWorkOrderApi.WorkOrder) { |
| | | barcodeDetailRef.value?.openByBusiness( |
| | | row.id!, |
| | | BarcodeBizTypeEnum.WORKORDER, |
| | | row.code, |
| | | row.name |
| | | ); |
| | | } |
| | | // function handleBarcode(row: MesProWorkOrderApi.WorkOrder) { |
| | | // barcodeDetailRef.value?.openByBusiness( |
| | | // row.id!, |
| | | // BarcodeBizTypeEnum.WORKORDER, |
| | | // row.code, |
| | | // row.name |
| | | // ); |
| | | // } |
| | | |
| | | /** 导出表格 */ |
| | | async function handleExport() { |
| | |
| | | confirm: handleCancel.bind(null, row), |
| | | }, |
| | | }, |
| | | { |
| | | label: '条码', |
| | | type: 'link', |
| | | auth: ['mes:pro-work-order:query'], |
| | | onClick: handleBarcode.bind(null, row), |
| | | }, |
| | | // { |
| | | // label: '条码', |
| | | // type: 'link', |
| | | // auth: ['mes:pro-work-order:query'], |
| | | // onClick: handleBarcode.bind(null, row), |
| | | // }, |
| | | { |
| | | label: '归档', |
| | | type: 'link', |
| | |
| | | ]" /> |
| | | </template> |
| | | </Grid> |
| | | <BarcodeDetail ref="barcodeDetailRef" /> |
| | | <!-- <BarcodeDetail ref="barcodeDetailRef" /> --> |
| | | <ArchiveDetail ref="archiveDetailRef" /> |
| | | </Page> |
| | | </template> |
| | |
| | | |
| | | import { confirm, useVbenModal } from "@vben/common-ui"; |
| | | import { |
| | | BarcodeBizTypeEnum, |
| | | MesProWorkOrderStatusEnum, |
| | | } from "@vben/constants"; |
| | | |
| | |
| | | } from "#/api/mes/pro/workorder"; |
| | | import { batchSaveWorkOrderProcess, getWorkOrderProcessListByWorkOrderId } from "#/api/mes/pro/workorder/process"; |
| | | import { $t } from "#/locales"; |
| | | import { BarcodeDetail } from "#/views/wls/barcode/components"; |
| | | // import { BarcodeDetail } from "#/views/wls/barcode/components"; |
| | | |
| | | import { useFormSchema } from "../data"; |
| | | import PredictDelivery from "./ai/predict-delivery.vue"; |
| | |
| | | const formData = ref<MesProWorkOrderApi.WorkOrder>(); |
| | | const originalSnapshot = ref(""); |
| | | const subTabsName = ref("process"); |
| | | const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); |
| | | // const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>(); |
| | | const processListRef = ref<InstanceType<typeof ProcessList>>(); |
| | | const currentProductId = ref<number>(); // 当前选中的产品 ID(用于工序加载) |
| | | const tempProcessList = ref<MesProWorkOrderProcessApi.WorkOrderProcess[]>([]); // 临时工序列表 |
| | |
| | | } |
| | | |
| | | /** 查看订单条码 */ |
| | | function handleBarcode() { |
| | | if (!formData.value?.id) { |
| | | return; |
| | | } |
| | | barcodeDetailRef.value?.openByBusiness( |
| | | formData.value.id, |
| | | BarcodeBizTypeEnum.WORKORDER, |
| | | formData.value.code, |
| | | formData.value.name |
| | | ); |
| | | } |
| | | // function handleBarcode() { |
| | | // if (!formData.value?.id) { |
| | | // return; |
| | | // } |
| | | // barcodeDetailRef.value?.openByBusiness( |
| | | // formData.value.id, |
| | | // BarcodeBizTypeEnum.WORKORDER, |
| | | // formData.value.code, |
| | | // formData.value.name |
| | | // ); |
| | | // } |
| | | |
| | | /** 工序列表变化回调 */ |
| | | function handleProcessListChange(list: MesProWorkOrderProcessApi.WorkOrderProcess[]) { |
| | |
| | | @click="handleSave"> |
| | | 保存修改 |
| | | </Button> |
| | | <Button v-if="formType === 'detail' && formData?.id" |
| | | <!-- <Button v-if="formType === 'detail' && formData?.id" |
| | | @click="handleBarcode"> |
| | | 查看条码 |
| | | </Button> |
| | | </Button> --> |
| | | <Button @click="modalApi.close()">取消</Button> |
| | | </div> |
| | | </template> |
| | | </Modal> |
| | | <BarcodeDetail ref="barcodeDetailRef" /> |
| | | <!-- <BarcodeDetail ref="barcodeDetailRef" /> --> |
| | | </template> |