| | |
| | | dataForGlassInventory.value = data; |
| | | }; |
| | | |
| | | //获取GlassInventory的值 |
| | | //获取GlassInventory的值(查询库存) |
| | | const sendDataGlassInventory = ref() |
| | | |
| | | const handleInventoyData = (selectedLabel1,selectedLabel2) => { |
| | | sendDataGlassInventory.value = { |
| | | selectedLabel1, selectedLabel2 |
| | | }; |
| | | }; |
| | | |
| | | //右键菜单打开修边 |
| | | const isTrimmingDialogVisible = ref(false); |
| | | const sendTrimming = (value) => { |
| | | isTrimmingDialogVisible.value = value; |
| | | }; |
| | | |
| | | </script> |
| | | |
| | | <template > |
| | | <div style="width: 100%;height: 100%"> |
| | | <div id="main-body"> |
| | | <project-detail @changeDialog="changeDialog" @forward-data-to-grandparent="handleProjectDetailData" @send-inventory-to-op="handleInventoyData"/> |
| | | <project-detail @changeDialog="changeDialog" |
| | | @forward-data-to-grandparent="handleProjectDetailData" |
| | | @send-inventory-to-op="handleInventoyData" |
| | | :TrimmingDialogVisible="isTrimmingDialogVisible" /> |
| | | </div> |
| | | <div id="main-footer"> |
| | | <glass-inventory :receivedData="dataForGlassInventory" :InventoryData="sendDataGlassInventory"/> |
| | | <glass-inventory :receivedData="dataForGlassInventory" |
| | | :InventoryData="sendDataGlassInventory" |
| | | @select-trimming="sendTrimming"/> |
| | | </div> |
| | | |
| | | |
| | |
| | | import {nextTick, onMounted, reactive, ref, watch} from "vue"; |
| | | import {useI18n} from "vue-i18n"; |
| | | import request from "@/utils/request"; |
| | | import {ElMessage} from "element-plus"; |
| | | import {ElMessage, ElMessageBox} from "element-plus"; |
| | | import {useRoute} from "vue-router"; |
| | | const { t } = useI18n() |
| | | |
| | | const {t} = useI18n() |
| | | |
| | | const xGrid = ref() |
| | | const gridOptions = reactive({ |
| | | height:'100%', |
| | | height: '100%', |
| | | loading: false, |
| | | border: "full",//表格加边框 |
| | | border: "full",//表格加边框 |
| | | keepSource: true,//保持源数据 |
| | | align: 'center',//文字居中 |
| | | stripe:true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true,height: 30, useKey: true},//鼠标移动或选择高亮 |
| | | stripe: true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true, height: 30, useKey: true},//鼠标移动或选择高亮 |
| | | id: 'GlassInventory', |
| | | scrollX:{enabled: true}, |
| | | scrollY:{ enabled: true ,gt:0},//开启虚拟滚动 |
| | | showOverflow:true, |
| | | scrollX: {enabled: true}, |
| | | scrollY: {enabled: true, gt: 0},//开启虚拟滚动 |
| | | showOverflow: true, |
| | | columnConfig: { |
| | | resizable: true, |
| | | useKey: true |
| | |
| | | showStatus: true |
| | | }, |
| | | |
| | | columns:[ |
| | | {type:'seq',fixed:"left", title:' ', width: 50}, |
| | | columns: [ |
| | | {type: 'seq', fixed: "left", title: ' ', width: 50}, |
| | | {type: 'checkbox', fixed: "left", title: t('basicData.check'), width: 80}, |
| | | {field: 'id', title: '物料编码',}, |
| | | {field:'width',title: t('order.width'),}, |
| | | {field: 'height',title: t('order.height')}, |
| | | {field: 'width', title: t('order.width'),}, |
| | | {field: 'height', title: t('order.height')}, |
| | | {field: 'thickness', title: t('order.totalThickness'),}, |
| | | {field: 'model', title: t('warehouseBasicData.type'),}, |
| | | {field: 'leftTrim', title: '左修边',}, |
| | |
| | | {field: 'name', title: '名称',}, |
| | | {field: 'producer', title: '供应商',} |
| | | ],//表头参数 |
| | | data:null,//表格数据 |
| | | data: null,//表格数据 |
| | | //右键菜单 |
| | | menuConfig: { |
| | | body: { |
| | | options: [ |
| | | [ |
| | | {code: 'choose', name: '选择',}, |
| | | {code: 'selectTrimming', name: '设置统一修边',}, |
| | | {code: 'Exports', name: '数据导出', prefixIcon: 'vxe-icon-download', visible: true, disabled: false}, |
| | | ], |
| | | [] |
| | | ] |
| | | }, |
| | | }, |
| | | toolbarConfig: { |
| | | buttons: [], |
| | | slots:{ |
| | | slots: { |
| | | buttons: "toolbar_buttons" |
| | | }, |
| | | }, |
| | | }) |
| | | |
| | | const emit = defineEmits(['select-trimming']); |
| | | // 右键菜单 |
| | | const operationConfigs = [ |
| | | { |
| | | code: 'choose', |
| | | successMsg: '已选中!', |
| | | gridRef: xGrid, |
| | | requiresRow: false, |
| | | showMessage: () => { |
| | | ElMessage.info('此功能暂未完善,暂时无法执行隐藏流程卡操作。'); |
| | | } |
| | | }, |
| | | { |
| | | code: 'selectTrimming', // 设置统一修边 |
| | | successMsg: '已打开!', |
| | | gridRef: xGrid, |
| | | requiresRow: false, |
| | | openTrimming: async () => { |
| | | emit('select-trimming', true) |
| | | } |
| | | }, |
| | | { |
| | | code: 'Exports', // 导出文件操作的配置 |
| | | successMsg: '文件导出成功!', |
| | | gridRef: xGrid, |
| | | requiresRow: false, |
| | | }, |
| | | ] |
| | | |
| | | // 右键菜单点击逻辑 |
| | | const gridEvents = { |
| | | menuClick({menu}) { |
| | | const $grid = xGrid.value; |
| | | if ($grid) { |
| | | const config = operationConfigs.find(c => c.code === menu.code); |
| | | if (config) { |
| | | if (config.code === 'Exports') { |
| | | config.gridRef.value.exportData(); |
| | | ElMessage.success(config.successMsg); |
| | | return; |
| | | } |
| | | // 添加确认提示弹窗,询问用户是否进行当前操作 |
| | | ElMessageBox.confirm('是否进行当前操作?', '确认操作', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | if (config.code === 'selectTrimming') { |
| | | config.openTrimming(); |
| | | ElMessage.success(config.successMsg); |
| | | } |
| | | }).catch(() => { |
| | | // 用户点击取消后执行的逻辑 |
| | | ElMessage.info('已取消操作'); |
| | | }); |
| | | } else { |
| | | console.error(`未找到操作选项 ${menu.code} 对应的配置,请检查配置项`); |
| | | } |
| | | } |
| | | }, |
| | | }; |
| | | |
| | | |
| | | const route = useRoute(); |
| | | |
| | |
| | | const model = ref(route.params.model); |
| | | |
| | | |
| | | const selectMaterialStore = () =>{ |
| | | const selectMaterialStore = () => { |
| | | request.post(`/glassOptimize/materialStore/${thickness.value}/${model.value}`).then((res) => { |
| | | if (Number(res.code) === 200) { |
| | | const rawData = res.data.data; |
| | |
| | | if (newData) { |
| | | Trimming(newData); |
| | | } |
| | | }, { immediate: true }); |
| | | }, {immediate: true}); |
| | | |
| | | watch(() => props.InventoryData, (newInventoryData) => { |
| | | if (newInventoryData) { |
| | |
| | | }); |
| | | |
| | | const props = defineProps({ |
| | | receivedData : { |
| | | receivedData: { |
| | | type: Object, |
| | | required: false, |
| | | properties: { |
| | | quicksetLeft: { type: Number }, |
| | | quicksetBottom: { type: Number }, |
| | | quicksetRight: { type: Number }, |
| | | quicksetTop: { type: Number } |
| | | quicksetLeft: {type: Number}, |
| | | quicksetBottom: {type: Number}, |
| | | quicksetRight: {type: Number}, |
| | | quicksetTop: {type: Number} |
| | | } |
| | | }, |
| | | InventoryData : { |
| | | InventoryData: { |
| | | type: Object, |
| | | required: false, |
| | | properties: { |
| | | selectedLabel1: { type: String }, |
| | | selectedLabel2: { type: String }, |
| | | selectedLabel1: {type: String}, |
| | | selectedLabel2: {type: String}, |
| | | } |
| | | } |
| | | }); |
| | |
| | | const item = data[i]; |
| | | const updatedItem = { |
| | | ...item, |
| | | // 此处修改为从 receivedData 中获取对应的值来更新表格数据项 |
| | | // 从 receivedData 中获取对应的值来更新表格数据项 |
| | | leftTrim: Number(receivedData.quicksetLeft), |
| | | downTrim: Number(receivedData.quicksetBottom), |
| | | rigthTrim: Number(receivedData.quicksetRight), |
| | |
| | | class="mytable-scrollbar" |
| | | ref="xGrid" |
| | | v-bind="gridOptions" |
| | | v-on="gridEvents" |
| | | > |
| | | |
| | | |
| | | <template #num2_filter="{ column, $panel }"> |
| | | <div> |
| | | <div v-for="(option, index) in column.filters" :key="index"> |
| | | <vxe-select v-model="option.data" :placeholder="$t('processCard.pleaseSelect')" @change="changeFilterEvent($event, option, $panel)"> |
| | | <vxe-select v-model="option.data" :placeholder="$t('processCard.pleaseSelect')" |
| | | @change="changeFilterEvent($event, option, $panel)"> |
| | | <vxe-option value="0" :label="$t('basicData.unchecked')"></vxe-option> |
| | | <vxe-option value="1" :label="$t('basicData.selected')"></vxe-option> |
| | | </vxe-select> |
| | |
| | | <script setup> |
| | | import {nextTick, onMounted, reactive, ref} from "vue"; |
| | | import {nextTick, onMounted, reactive, ref, watch} from "vue"; |
| | | import {useI18n} from "vue-i18n"; |
| | | import {Folder, Plus, Setting, Operation,} from "@element-plus/icons-vue"; |
| | | import OptimizeCompute from "@/views/pp/glassOptimize/page/OptimizeCompute.vue"; |
| | |
| | | {code: 'hideProcessCard', name: '隐藏流程卡',}, |
| | | {code: 'setShape', name: '设置图形',}, |
| | | {code: 'Export', name: '数据导出', prefixIcon: 'vxe-icon-download', visible: true, disabled: false}, |
| | | {code: '', name: '图形另存为DXF',}, |
| | | {code: '', name: '导出数据到OPTIMA',}, |
| | | {code: 'safeDXF', name: '图形另存为DXF',}, |
| | | {code: 'exportOPTIMA', name: '导出数据到OPTIMA',}, |
| | | ], |
| | | [] |
| | | ] |
| | |
| | | successMsg: '操作成功!', |
| | | gridRef: xGrid, |
| | | requiresRow: false, |
| | | showMessage: () => { |
| | | ElMessage.info('此功能暂未完善,暂时无法执行显示流程卡操作。'); |
| | | } |
| | | }, |
| | | { |
| | | code: 'hideProcessCard', |
| | | successMsg: '操作成功!', |
| | | gridRef: xGrid, |
| | | requiresRow: false, |
| | | showMessage: () => { |
| | | ElMessage.info('此功能暂未完善,暂时无法执行隐藏流程卡操作。'); |
| | | } |
| | | }, |
| | | { |
| | | code: 'setShape', |
| | | successMsg: '操作成功!', |
| | | gridRef: xGrid, |
| | | requiresRow: false, |
| | | showMessage: () => { |
| | | ElMessage.info('此功能暂未完善,暂时无法执行设置图形操作。'); |
| | | } |
| | | }, |
| | | { |
| | | code: 'Export', // 导出文件操作的配置 |
| | | successMsg: '文件导出成功!', |
| | | gridRef: xGrid, |
| | | requiresRow: false, |
| | | }, |
| | | { |
| | | code: 'safeDXF', |
| | | successMsg: '操作成功!', |
| | | gridRef: xGrid, |
| | | requiresRow: false, |
| | | showMessage: () => { |
| | | ElMessage.info('此功能暂未完善,暂时无法执行图形另存为DXF操作。'); |
| | | } |
| | | }, |
| | | { |
| | | code: 'exportOPTIMA', |
| | | successMsg: '操作成功!', |
| | | gridRef: xGrid, |
| | | requiresRow: false, |
| | | showMessage: () => { |
| | | ElMessage.info('此功能暂未完善,暂时无法执行导出数据到OPTIMA操作。'); |
| | | } |
| | | }, |
| | | ] |
| | | |
| | |
| | | if (config.code === 'setAmount') { |
| | | config.openAmount(); |
| | | ElMessage.success(config.successMsg); |
| | | }else if (['displayProcessCard', 'hideProcessCard', 'setShape', 'safeDXF', 'exportOPTIMA'].includes(config.code)) { |
| | | config.showMessage(); |
| | | } |
| | | }).catch(() => { |
| | | // 用户点击取消后执行的逻辑 |
| | |
| | | const openDialog = (index) => { |
| | | dialogVisible.value[index] = true; |
| | | }; |
| | | |
| | | //关闭弹窗 |
| | | const closeDialog = (index) => { |
| | | dialogVisible.value[index] = false; |
| | | }; |
| | | |
| | | //右键菜单统一修边 |
| | | const props = defineProps({ |
| | | TrimmingDialogVisible: Boolean |
| | | }); |
| | | watch(() => props.TrimmingDialogVisible, (newValue) => { |
| | | if (newValue === true) { |
| | | dialogVisible.value[3] = newValue; |
| | | } |
| | | }); |
| | | |
| | | const route = useRoute(); |
| | | //工程号 |
| | | const projectNo = ref(route.params.projectNo); |
| | |
| | | |
| | | .square-container { |
| | | width: 300px; |
| | | height: 300px; |
| | | height: 250px; |
| | | display: flex; |
| | | position: relative; |
| | | justify-content: center; |
| | |
| | | } |
| | | |
| | | .top { |
| | | top: 45px; |
| | | top: 20px; |
| | | left: 50%; |
| | | transform: translateX(-50%); |
| | | } |
| | |
| | | } |
| | | |
| | | .bottom { |
| | | bottom: 45px; |
| | | bottom: 20px; |
| | | left: 50%; |
| | | transform: translateX(-50%); |
| | | } |