| | |
| | | connectErr:'The server connection is abnormal. Please try again later', |
| | | titleFirst:"Welcome ", |
| | | titleLast:' to use North Glass ERP system!' |
| | | }, |
| | | basicData:{ |
| | | create:'New Order', |
| | | review:"Review", |
| | | cancelReview:"Reset", |
| | | save:'Save', |
| | | add:'Add', |
| | | delete:'Delete', |
| | | edit:'Edit', |
| | | selectSame:'Select same', |
| | | sameAfterwards:'Same afterwards', |
| | | clearSelection:'Clear selection', |
| | | calculateAmount:'Calculate amount', |
| | | Number:'No.', |
| | | remarks:'Remarks', |
| | | total:'Total', |
| | | check:'Check', |
| | | operate:'Operate', |
| | | search:'Search', |
| | | startDate:'Start Date', |
| | | endDate:'End Date', |
| | | msg:{ |
| | | max255:"The value contains a maximum of 255 characters", |
| | | range99999Dec2: |
| | | "Please enter a number between 0 and 99999 with a maximum of two decimals", |
| | | greater0:"Please enter an integer greater than 0", |
| | | checkoutLose:'Check fail', |
| | | saveSuccess:'save successfully', |
| | | saveFail:'Save fail', |
| | | cancelReviewSuccess:'Cancel review successfully', |
| | | ReviewSuccess:'Review successfully' |
| | | } |
| | | }, |
| | | order:{ |
| | | orderHomePage:'Order Home Page', |
| | | orderReport:'Order Report', |
| | | project:'Project', |
| | | orderId:'Order ID', |
| | | money:'Total Amount', |
| | | customers:"Customers", |
| | | deliveryDate:"Delivery Date", |
| | | contractId:'ContractId', |
| | | orderType:'Order Type', |
| | | batch:'Batch', |
| | | customerBatch:'Customer Batch', |
| | | orderClassify:'Order Classify', |
| | | calculateType:'Calculate Type', |
| | | contacts:'Contacts', |
| | | icon:'Trademark', |
| | | salesman:'Salesman', |
| | | contactNumber:'Contact Number', |
| | | packType:'Package Type ', |
| | | alType:'Aluminum Type', |
| | | deliveryAddress:'Delivery Address', |
| | | processingNote:'Processing Note', |
| | | technology:'Technology', |
| | | amountReset:'Amount Reset', |
| | | OrderNum:'Order Number', |
| | | productId:'Product ID', |
| | | product:'Product', |
| | | price:'Price', |
| | | quantity:'Quantity', |
| | | grossAmount:'Gross Amount', |
| | | width:'Width', |
| | | height:'Height', |
| | | area:'Area', |
| | | trueArea:'True Area', |
| | | trueGrossArea:'True Gross Area', |
| | | computeArea:'Compute Area', |
| | | computeGrossArea:'Compute Gross Area', |
| | | shape:'Shape', |
| | | bendRadius:'Bend Radius', |
| | | edgingType:'Edging Type', |
| | | import:'import', |
| | | msg:{ |
| | | productCheck:'Please select a product', |
| | | tableLengthNot:'No table data', |
| | | amountReset:'Please open the right click menu to recalculate the amount and then save', |
| | | projectCheck: 'Please enter a project name', |
| | | customerCheck: 'Please select Customer', |
| | | salasManCheck: 'Please select Sales', |
| | | calculateTypeCheck: 'Please select a calculation method', |
| | | tableLengthMax:'The table data has reached the maximum value. Procedure', |
| | | productStateCheck:'The product has not yet been reviewed', |
| | | importMaxCheckFailFirst:'Import ', |
| | | importMaxCheckFailMid:' the data can not exceed ', |
| | | importMaxCheckFailLast:' pieces, please import in multiple orders', |
| | | updateAmountSuccessfully:'Updated amount successfully' |
| | | } |
| | | |
| | | }, |
| | | |
| | | //工单管理 |
| | | workOrder:{ |
| | | workOrder:'Work Order Management', |
| | | productionId:'Production Order Number', |
| | | convert:'Convert', |
| | | unConverted:'UnConverted', |
| | | deleteOk:'Delete Successful', |
| | | transferOrder:'Transfer Order', |
| | | perimeter:'perimeter' |
| | | }, |
| | | processCard:{ |
| | | processId:'Process Card Number', |
| | | founder:'Divider', |
| | | layoutStatus:'Type Setting', |
| | | splitFrame:'Rack Allocation', |
| | | processCardManagement:'Process Card Management', |
| | | smallPieceOrder:'Monolithic Sequence', |
| | | quantityToDivided:'Quantity To Be Divided', |
| | | areaToDivided:'Area To Be Divided', |
| | | totalThickness:'Total Thickness', |
| | | glassThickness:'Glass Thickness', |
| | | weight:'Weight', |
| | | selectedQuantity:'Select Quantity', |
| | | establishProcessCards:'Add', |
| | | return:'Return', |
| | | ProductionSchedulingOk:'Scheduled Production', |
| | | ProductionSchedulingNo:'Unscheduled Production', |
| | | orderQuantity:'Order Quantity', |
| | | orderArea:'Order Area', |
| | | productionSchedulingQuantity:'Production Scheduling Quantity', |
| | | quantityToScheduled:'Quantity To Be Scheduled', |
| | | areaToScheduled:'Pending Production Area', |
| | | plannedProductionQuantity:'Produced Quantity', |
| | | plannedProductionArea:'Produced Area', |
| | | reviewedState:'Review Status', |
| | | reviewed:'Reviewer', |
| | | schedulingId:'Production Scheduling Number', |
| | | scheduling:'Production Scheduling', |
| | | schedulingOk:'Please select the data on the right first', |
| | | schedulingNo:'Please enter a positive integer', |
| | | schedulingQuantity:'Please enter a number less than or equal to the number available', |
| | | schedulingArea:'Please select the data on the left first', |
| | | schedulingTime:'Please select the data on the left first', |
| | | schedulingTimeOk:'Please enter a number less than or equal to the number to be divided', |
| | | schedulingTimeNo:'Please select the data to save first', |
| | | schedulingTimeQuantity:'Create a flow card for all the data on the right and save it', |
| | | checkProductionScheduling:'Please select scheduling data', |
| | | saveCorrespondingValues:'Please fill in the corresponding value before saving', |
| | | selectProductionSchedulingProcess:'Please select the scheduling process', |
| | | deleteThisData:'You are sure you want to delete the data', |
| | | schedulingQuantityNoQuantityScheduled:'The number of scheduled production cannot be greater than the number to be scheduled', |
| | | typesettingSuccess:'Typesetting Success', |
| | | modifySuccessfully:'Modify Successfully', |
| | | composing:'composing', |
| | | composingOk:'Can Be Typesetter', |
| | | composingNo:'Non Typesetting', |
| | | typesetter:'typesetter', |
| | | scheduledStartTime:'Scheduled Start Time', |
| | | planEndTime:'Plan End Time', |
| | | customerId:'Customer Id', |
| | | customerName:'Customer', |
| | | technologyNumber:'Chip Sequence', |
| | | otherRemarks:'Original Film Requirement', |
| | | }, |
| | | |
| | | reportingWorks:{ |
| | | glassAddress:'Glass Address', |
| | | WorkReportingManagement:'Work Reporting Management ', |
| | | addReportingWorks:'New Work Reporting', |
| | | qualityInspectionReview:'Quality Inspection Review', |
| | | early:'Morning Shift ', |
| | | nightShift:'Night Shift', |
| | | numberProcessCards:'Number Of Process Cards', |
| | | reportableQuantityOk:'Quantity Work available', |
| | | completedQuantity:'Completed Quantity', |
| | | quantityBroken:'Damage Quantity', |
| | | completed:'Completed', |
| | | onceBroken:'Damaged', |
| | | available:'Available', |
| | | returnProcess:'Return Process', |
| | | breakageType:'Damage Type', |
| | | breakageReason:'Damage Reason', |
| | | responsibleProcess:'Responsible Process', |
| | | responsibleEquipment:'Equipment', |
| | | responsibleTeam:'Team', |
| | | responsiblePersonnel:'Personnel', |
| | | increase:'Add', |
| | | lossCount:'Loss Number', |
| | | completedNumber:'Completed Quantity', |
| | | sumOf:'Sum Of', |
| | | greaterThanNo:'Cannot be greater than', |
| | | selectProcessCardData:'Please select process card data', |
| | | selectWorkReportingEquipment:'Please select a reporting device', |
| | | atLeastOneFinishedAndWornEligible:'Please fill in at least one loss number and completion number greater than 0', |
| | | successfulJobApplication:'Report Success', |
| | | actualQuantity:'Actual Reporting Quantity', |
| | | thisProcessQuantity:'Completed Quantity', |
| | | reReportingWork:'Please refresh the interface and report again', |
| | | correctFormatProcessCard:'Please enter the correct format process card', |
| | | processCardCorrectNumberDigits:'Please enter the correct number of process cards', |
| | | selectProcess:'Please select process', |
| | | firstProcessNotReview:'The first process does not need to be audited', |
| | | thisProcessNotProcessCard:'This procedure does not belong to the process card', |
| | | noDataThisProcessCard:'This process card data is not queried', |
| | | serialNumber:'The number of serial number', |
| | | quantityNotPreviousProcessNum:'Cannot be greater than the number of the previous operation', |
| | | enterTheSerialNumber:'Please enter serial number', |
| | | correctQuantity:'Correct number of completions or breakdowns', |
| | | processCardArea:'Process Card Area', |
| | | deviceType:'Reporting Equipment', |
| | | pleaseDevice:'Please select a device', |
| | | previousProcess:'Previous Process', |
| | | numberReported:'Quantity Work Available', |
| | | teamsType:'Reporting Team', |
| | | selectTeam:'Please select a team', |
| | | classes:'Shift', |
| | | selectClasses:'Please select flight', |
| | | nextProcess:'Next Process', |
| | | reportingWorkTime:'Date Of Work Application', |
| | | damageList:'Damage List', |
| | | qualityInspector:'Quality Inspector', |
| | | qualityInsStatus:'Quality Inspection Status', |
| | | previousProcessQuantity:'Previous Process Quantity', |
| | | selectBreakageType:'Please select the secondary break type', |
| | | selectBreakageReason:'Please select the reason for the second break', |
| | | selectResponsibleProcess:'Please select the responsible process', |
| | | selectResponsibleEquipment:'Please select the responsible device', |
| | | availableOkReturnProcess:'Use already selected, please select return process', |
| | | enterIntegerGreaterThan:'Enter an integer greater than 0', |
| | | enterIntegerGreaterThanEqualTo:'Please enter an integer that is greater than or equal to 0\n', |
| | | saveAndReview:'Save Andf Review', |
| | | reportingWorkId:'Reporting Work Number', |
| | | reportingProcess:'Reporting Process', |
| | | glassChild:'Glass Child', |
| | | thisCompletedQuantity:'This Completed Quantity', |
| | | thisWornQuantity:'This Worn Quantity', |
| | | passAudit:'Pass The Audit', |
| | | |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | const i18n = createI18n({ |
| | | locale: localStorage.getItem('lang') || 'en', // 设置当前语言类型 |
| | | locale: localStorage.getItem('lang') || 'zh', // 设置当前语言类型 |
| | | legacy: false, // 如果要支持compositionAPI,此项必须设置为false; |
| | | globalInjection: true, // 全局注册$t方法 |
| | | messages |
| | |
| | | titleFirst:"欢迎 ", |
| | | titleLast:' 使用北玻ERP系统!' |
| | | }, |
| | | basicData:{ |
| | | create:'创建', |
| | | review:"审核", |
| | | cancelReview:"反审", |
| | | save:'保存', |
| | | add:'添加', |
| | | delete:'删除', |
| | | edit:'编辑', |
| | | selectSame:'选中相同', |
| | | sameAfterwards:'之后相同', |
| | | clearSelection:'清除选中', |
| | | calculateAmount:'计算金额', |
| | | Number:'自序', |
| | | remarks:'备注', |
| | | total:'合计', |
| | | check:'选择', |
| | | operate:'操作', |
| | | search:'查询', |
| | | startDate:'开始时间', |
| | | endDate:'结束时间', |
| | | msg:{ |
| | | max255:"最多输入255个字符", |
| | | range99999Dec2: |
| | | "请输入0-99999之间的数字,最多保留两位小数", |
| | | greater0:"请输入大于0的整数", |
| | | checkoutLose:'校验不通过', |
| | | saveSuccess:'保存成功', |
| | | saveFail:'保存失败', |
| | | cancelReviewSuccess:'反审成功', |
| | | ReviewSuccess:'审核成功' |
| | | } |
| | | }, |
| | | order:{ |
| | | orderHomePage:'订单首页', |
| | | orderReport:'订单报表', |
| | | project:'项目名称', |
| | | orderId:'销售单号', |
| | | money:'总金额', |
| | | customers:"客户选择", |
| | | deliveryDate:"交货日期", |
| | | contractId:'合同编号', |
| | | orderType:'订单类型', |
| | | batch:'批次', |
| | | customerBatch:'客户批次', |
| | | orderClassify:'订单分类', |
| | | calculateType:'计算方式', |
| | | contacts:'联系人', |
| | | icon:'商标选项', |
| | | salesman:'业务员', |
| | | contactNumber:'联系电话', |
| | | packType:'包装方式', |
| | | alType:'铝条方式', |
| | | deliveryAddress:'送货地址', |
| | | processingNote:'加工要求', |
| | | technology:'工艺', |
| | | amountReset:'金额重置', |
| | | OrderNum:'订单序号', |
| | | productId:'产品Id', |
| | | product:'产品', |
| | | price:'单价', |
| | | quantity:'数量', |
| | | grossAmount:'总金额', |
| | | width:'宽', |
| | | height:'高', |
| | | area:'面积', |
| | | trueArea:'实际单片金额', |
| | | trueGrossArea:'实际总面积', |
| | | computeArea:'结算单片面积', |
| | | computeGrossArea:'计算总面积', |
| | | shape:'形状', |
| | | bendRadius:'弯钢弧度', |
| | | edgingType:'磨边类型', |
| | | import:'导入', |
| | | msg:{ |
| | | productCheck:'请选择产品', |
| | | tableLengthNot:'没有表格数据', |
| | | amountReset:'请先打开右击菜单重新计算金额后,再保存', |
| | | projectCheck: '请输入项目名称', |
| | | customerCheck: '请选择客户', |
| | | salasManCheck: '请选择业务员', |
| | | calculateTypeCheck: '请选择计算方式', |
| | | tableLengthMax:'表格数据已达到最大值', |
| | | productStateCheck:'该产品还未审核', |
| | | importMaxCheckFailFirst:'导入', |
| | | importMaxCheckFailMid:'条,$数据不能超过', |
| | | importMaxCheckFailLast:'条,请分订单导入', |
| | | updateAmountSuccessfully:'更新金额成功' |
| | | } |
| | | |
| | | }, |
| | | workOrder:{ |
| | | workOrder:'工单管理', |
| | | productionId:'生产订单号', |
| | | convert:'已转', |
| | | unConverted:'未转', |
| | | deleteOk:'删除成功', |
| | | transferOrder:'转工单', |
| | | perimeter:'周长' |
| | | |
| | | }, |
| | | processCard:{ |
| | | processId:'流程卡号', |
| | | founder:'分架员', |
| | | layoutStatus:'排版状态', |
| | | splitFrame:'分架', |
| | | processCardManagement:'流程卡管理', |
| | | quantityToDivided:'待分数量', |
| | | areaToDivided:'待分面积', |
| | | totalThickness:'总厚度', |
| | | glassThickness:'玻璃厚度', |
| | | weight:'重量', |
| | | selectedQuantity:'选中数量', |
| | | establishProcessCards:'建立流程卡', |
| | | return:'返回', |
| | | ProductionSchedulingOk:'已排产', |
| | | ProductionSchedulingNo:'未排产', |
| | | orderQuantity:'订单数量', |
| | | orderArea:'订单面积', |
| | | productionSchedulingQuantity:'排产数量', |
| | | quantityToScheduled:'待排产数量', |
| | | areaToScheduled:'待排产面积', |
| | | plannedProductionQuantity:'已排产数量', |
| | | plannedProductionArea:'已排产面积', |
| | | reviewedState:'审核状态', |
| | | reviewed:'审核人', |
| | | schedulingId:'排产编号', |
| | | notes:'备注', |
| | | scheduling:'排产', |
| | | schedulingOk:'请先选择右侧数据', |
| | | schedulingNo:'请输入正整数', |
| | | schedulingQuantity:'请输入小于等于可用数量的数字', |
| | | schedulingArea:'请先选择左侧数据', |
| | | schedulingTime:'请先选择左侧一条数据', |
| | | schedulingTimeOk:'请输入小于等于待分数量的数字', |
| | | schedulingTimeNo:'请先选择保存的数据', |
| | | schedulingTimeQuantity:'请先将右侧数据全部建立流程卡后保存', |
| | | checkProductionScheduling:'请勾选排产数据', |
| | | saveCorrespondingValues:'请填入对应的值再进行保存', |
| | | selectProductionSchedulingProcess:'请选择排产工序', |
| | | deleteThisData:'您确定要删除该数据', |
| | | schedulingQuantityNoQuantityScheduled:'排产数量不能大于待排产数量', |
| | | typesettingSuccess:'排版成功', |
| | | modifySuccessfully:'修改成功', |
| | | composing:'排版', |
| | | composingOk:'可排版', |
| | | composingNo:'不可排版', |
| | | typesetter:'已排版', |
| | | scheduledStartTime:'计划开始时间', |
| | | planEndTime:'计划结束时间', |
| | | customerId:'客户编码', |
| | | customerName:'客户名称', |
| | | technologyNumber:'小片顺序', |
| | | otherRemarks:'原片要求', |
| | | |
| | | }, |
| | | |
| | | reportingWorks:{ |
| | | glassAddress:'片标记', |
| | | WorkReportingManagement:'报工管理', |
| | | addReportingWorks:'报工新增', |
| | | qualityInspectionReview:'质检审核', |
| | | early:'早班', |
| | | nightShift:'晚班', |
| | | numberProcessCards:'流程卡数量', |
| | | reportableQuantityOk:'可报数量', |
| | | completedQuantity:'完工数量', |
| | | quantityBroken:'次破数量', |
| | | completed:'已完工', |
| | | onceBroken:'已次破', |
| | | available:'可利用', |
| | | returnProcess:'退回工序', |
| | | breakageType:'次破类型', |
| | | breakageReason:'次破原因', |
| | | responsibleProcess:'责任工序', |
| | | responsibleEquipment:'责任设备', |
| | | responsibleTeam:'责任班组', |
| | | responsiblePersonnel:'责任人员', |
| | | increase:'添加', |
| | | lossCount:'损耗数', |
| | | completedNumber:'完工数', |
| | | sumOf:'之和', |
| | | greaterThanNo:'不能大于', |
| | | selectProcessCardData:'请选择流程卡数据', |
| | | selectWorkReportingEquipment:'请选择报工设备', |
| | | atLeastOneFinishedAndWornEligible:'请填写至少一条损耗数和完工数大于0', |
| | | successfulJobApplication:'报工成功', |
| | | actualQuantity:'实际可报工数量', |
| | | thisProcessQuantity:'报工数量', |
| | | reReportingWork:'请刷新界面重新报工', |
| | | correctFormatProcessCard:'请输入正确格式流程卡', |
| | | processCardCorrectNumberDigits:'请输入正确位数的流程卡', |
| | | selectProcess:'请选择工序', |
| | | firstProcessNotReview:'第一道工序不需要审核', |
| | | thisProcessNotProcessCard:'此工序不属于该流程卡', |
| | | noDataThisProcessCard:'未查询到此流程卡数据', |
| | | serialNumber:'序号', |
| | | quantityNotPreviousProcessNum:'的数量不能大于上工序数量', |
| | | enterTheSerialNumber:'请输入序号', |
| | | correctQuantity:'正确的完工或次破数量', |
| | | processCardArea:'流程卡面积', |
| | | deviceType:'报工设备', |
| | | pleaseDevice:'请选择设备', |
| | | previousProcess:'上工序', |
| | | numberReported:'可报工数量', |
| | | teamsType:'报工班组', |
| | | selectTeam:'请选择班组', |
| | | classes:'班次', |
| | | selectClasses:'请选择班次', |
| | | nextProcess:'下工序', |
| | | reportingWorkTime:'报工日期', |
| | | damageList:'破损列表', |
| | | qualityInspector:'质检员', |
| | | qualityInsStatus:'质检状态', |
| | | previousProcessQuantity:'上工序完工数量', |
| | | selectBreakageType:'请选择次破类型', |
| | | selectBreakageReason:'请选择次破原因', |
| | | selectResponsibleProcess:'请选择责任工序', |
| | | selectResponsibleEquipment:'请选择责任设备', |
| | | availableOkReturnProcess:'可利用已选择,请选择返回工序', |
| | | enterIntegerGreaterThan:'输入大于0的整数', |
| | | enterIntegerGreaterThanEqualTo:'请输入整数,并且大于等于0', |
| | | saveAndReview:'保存并审核', |
| | | reportingWorkId:'报工编号', |
| | | reportingProcess:'报工工序', |
| | | glassChild:'单片名称', |
| | | thisCompletedQuantity:'本工序完工', |
| | | thisWornQuantity:'本工序次破', |
| | | passAudit:'审核通过', |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | import useUserInfoStore from "@/stores/userInfo"; |
| | | |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | let productGlassTypeStore = useProductGlassTypeStore() |
| | | let router = useRouter() |
| | | const userStore = useUserInfoStore() |
| | |
| | | case 'delete': { |
| | | request.post(`/processCard/deleteFlowCard/${row.orderId}/${row.processId}`).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("删除成功") |
| | | ElMessage.success(t('workOrder.deleteOk')) |
| | | location.reload(); |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | router.push("/login") |
| | | // router.push("/login") |
| | | } |
| | | }) |
| | | break |
| | |
| | | showStatus: true |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'checkbox', fixed: "left", title: '选择'}, |
| | | {type: 'checkbox', fixed: "left", title: t('basicData.check')}, |
| | | { |
| | | field: 'orderNumber', |
| | | title: '订序', |
| | | title: t('basicData.check'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'shape', |
| | | title: '形状', |
| | | title: t('order.shape'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | |
| | | }, |
| | | { |
| | | field: 'width', |
| | | title: '宽', |
| | | title: t('order.width'), |
| | | sortable: true, |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | |
| | | }, |
| | | { |
| | | field: 'height', |
| | | title: '高', |
| | | title: t('order.height'), |
| | | sortable: true, |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged, |
| | | width: '60px' |
| | | }, |
| | | {field: 'baiscQuantity', title: '待分数量', showOverflow: "ellipsis", width: '60px'}, |
| | | {field: 'computeGrossArea', title: '待分面积', width: '60px'}, |
| | | {field: 'totalThickness', title: '总厚度', width: '80px'}, |
| | | {field: 'thickness', title: '玻璃厚度', width: '60px'}, |
| | | {field: 'weight', title: '重量'} |
| | | {field: 'baiscQuantity', title: t('processCard.quantityToDivided'), showOverflow: "ellipsis", width: '60px'}, |
| | | {field: 'computeGrossArea', title: t('processCard.areaToDivided'), width: '60px'}, |
| | | {field: 'totalThickness', title: t('processCard.totalThickness'), width: '80px'}, |
| | | {field: 'thickness', title: t('processCard.glassThickness'), width: '60px'}, |
| | | {field: 'weight', title: t('processCard.weight')} |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | return [ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | showStatus: true |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'checkbox', fixed: "left", title: '选择'}, |
| | | {type: 'checkbox', fixed: "left", title: t('basicData.check')}, |
| | | { |
| | | field: 'processId', |
| | | title: '流程卡号', |
| | | title: t('processCard.processId'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | width: 130, |
| | |
| | | }, |
| | | { |
| | | field: 'orderNumber', |
| | | title: '订序', |
| | | title: t('order.OrderNum'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'} |
| | |
| | | }, |
| | | { |
| | | field: 'landingSequence', |
| | | title: '小片顺序', |
| | | title: t('processCard.technologyNumber'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | {field: 'shape', title: '形状', filters: [{data: ''}], slots: {filter: 'num1_filter'}, filterMethod: filterChanged}, |
| | | {field: 'width', title: '宽', showOverflow: "ellipsis"}, |
| | | {field: 'height', title: '高'}, |
| | | {field: 'quantity', title: '总数量'}, |
| | | {field: 'totalThickness', title: '总厚度'}, |
| | | {field: 'shape', title: t('order.shape'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, filterMethod: filterChanged}, |
| | | {field: 'width', title: t('order.width'), showOverflow: "ellipsis"}, |
| | | {field: 'height', title: t('order.height')}, |
| | | {field: 'quantity', title: t('order.quantity')}, |
| | | {field: 'totalThickness', title: t('processCard.totalThickness')}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {code: 'saveFlowCard', name: '保存', status: 'primary', icon: 'vxe-icon-save'}, |
| | | {code: 'saveFlowCard', name: t('basicData.save'), status: 'primary', icon: 'vxe-icon-save'}, |
| | | ], |
| | | // import: false, |
| | | // export: true, |
| | |
| | | return [ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | const checkedList = $grid.getCheckboxRecords() |
| | | |
| | | if (checkedList.length === 0) { |
| | | ElMessage.warning("请先选择右侧数据") |
| | | ElMessage.warning(t('processCard.schedulingOk')) |
| | | return |
| | | } |
| | | //productionId |
| | |
| | | const processId = productionId + index.toString().padStart(2, '0') |
| | | const regex = /^(\d+|)$/; |
| | | if (!regex.test(checkedNum.value)) { |
| | | ElMessage.warning("请输入正整数") |
| | | ElMessage.warning(t('processCard.schedulingNo')) |
| | | return |
| | | } |
| | | //判断正整数 |
| | |
| | | //定义key值保持 |
| | | |
| | | //判断可用数量是否大于等于输入的数量,不满足则抛出异常 |
| | | if (item.baiscQuantity * 1 < checkedNum.value * 1) throw new Error("请输入小于等于可用数量的数字"); |
| | | if (item.baiscQuantity * 1 < checkedNum.value * 1) throw new Error(t('processCard.schedulingQuantity')); |
| | | item.quantity = checkedNum.value |
| | | item.processId = processId |
| | | item.landingSequence = index |
| | |
| | | const checkedList = $gridLeft.getCheckboxRecords() |
| | | //判断左边表格是否有选中的数据 |
| | | if (checkedList.length === 0) { |
| | | ElMessage.warning("请先选择左侧数据") |
| | | ElMessage.warning(t('processCard.schedulingArea')) |
| | | return |
| | | } |
| | | const regex = /^(\d+|)$/; |
| | | if (!regex.test(checkedNum.value)) { |
| | | ElMessage.warning("请输入正整数") |
| | | ElMessage.warning(t('processCard.schedulingNo')) |
| | | return |
| | | } |
| | | //判断正整数 |
| | |
| | | //对选中的左边表格数据进行循环 |
| | | checkedList.forEach((item) => { |
| | | //判断可用数量是否大于等于输入的数量,不满足则抛出异常 |
| | | if (item.quantity < checkedNum.value) throw new Error("请输入小于等于可用数量的数字"); |
| | | if (item.quantity < checkedNum.value) throw new Error(t('processCard.schedulingQuantity')); |
| | | //左边表格可用数量减去输入的数量 |
| | | item.quantity = item.quantity - checkedNum.value |
| | | //右边表格数据 |
| | |
| | | const checkedListLeft = $gridLeft.getCheckboxRecords() |
| | | //判断右边表格是否有选中的数据 |
| | | if (checkedList.length * 1 === 0) { |
| | | ElMessage.warning("请先选择右侧数据") |
| | | ElMessage.warning(t('processCard.schedulingOk')) |
| | | return |
| | | } |
| | | if (checkedListLeft.length !== 1) { |
| | | ElMessage.warning("请先选择左侧一条数据") |
| | | ElMessage.warning(t('processCard.schedulingTime')) |
| | | return |
| | | } |
| | | const regex = /^(\d+|)$/; |
| | | if (!regex.test(checkedNum.value)) { |
| | | ElMessage.warning("请输入正整数") |
| | | ElMessage.warning(t('processCard.schedulingNo')) |
| | | return |
| | | } |
| | | //判断正整数 |
| | | if (/^[1-9]\d*$/.test(checkedNum.value)) { |
| | | checkedList.forEach((item) => { |
| | | //判断可用数量是否大于等于输入的数量,不满足则抛出异常 |
| | | if (item.baiscQuantity * 1 < checkedNum.value * 1) throw new Error("请输入小于等于可用数量的数字"); |
| | | if (item.baiscQuantity * 1 < checkedNum.value * 1) throw new Error("请输入小于等于待分数量的数字"); |
| | | item.baiscQuantity = item.baiscQuantity - checkedNum.value |
| | | //定义key值保持 |
| | | let key = item._X_ROW_KEY |
| | |
| | | style="float: left" |
| | | type="primary" |
| | | @click="intoCreateProduct"> |
| | | {{ flag ? '返回' : '返回' }} |
| | | {{ flag ? t('processCard.return') : t('processCard.return') }} |
| | | </el-button> |
| | | <!-- <el-button type="primary">保存分架</el-button>--> |
| | | <!-- <el-button type="primary" :hidden="true">分架汇总</el-button>--> |
| | |
| | | |
| | | <div width="12%"> |
| | | <el-main style=""> |
| | | <span>选中数量:<el-input v-model="checkedNum" clearable type="number"></el-input></span><br> |
| | | <span>{{$t('processCard.selectedQuantity')}}:<el-input v-model="checkedNum" clearable type="number"></el-input></span><br> |
| | | <el-button type="primary" @click="addRight"> →</el-button> |
| | | <br> |
| | | <br> |
| | | <el-button type="primary" @click="addLeft"> ←</el-button> |
| | | <br> |
| | | <br> |
| | | <el-button type="primary" @click="createProcessCard">建立流程卡</el-button> |
| | | <el-button type="primary" @click="createProcessCard">{{$t('processCard.establishProcessCards')}}</el-button> |
| | | </el-main> |
| | | </div> |
| | | |
| | |
| | | import {ElMessage} from "element-plus"; |
| | | import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router"; |
| | | import GlassType from '@/components/basic/product/GlassType.vue' |
| | | |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | const route = useRoute() |
| | | const router = useRouter() |
| | | let indexFlag=$ref(1) |
| | |
| | | <div id="main"> |
| | | <div id="div-title"> |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/processCard/SelectProcessCard' }">流程卡管理</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/processCard/SelectAddProcess' }">分架</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/processCard/ProductionScheduling' }">排产</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/processCard/SelectProcessCard' }">{{$t('processCard.processCardManagement')}} |
| | | </el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/processCard/SelectAddProcess' }">{{$t('processCard.splitFrame')}} |
| | | </el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/processCard/ProductionScheduling' }">{{$t('processCard.scheduling')}} |
| | | </el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">打印</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | |
| | | import useUserInfoStore from "@/stores/userInfo"; |
| | | import {changeFilterEvent, filterChanged} from "@/hook" |
| | | import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove"; |
| | | |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | |
| | | let router = useRouter() |
| | | const userStore = useUserInfoStore() |
| | |
| | | |
| | | |
| | | //工序 |
| | | const value = ref('切割') |
| | | const value = ref('cutting') |
| | | |
| | | |
| | | //排产状态 |
| | |
| | | const stateOptions = [ |
| | | { |
| | | value: '2', |
| | | label: '已排产', |
| | | label: t('processCard.ProductionSchedulingOk'), |
| | | }, |
| | | { |
| | | value: '1', |
| | | label: '未排产', |
| | | label: t('processCard.ProductionSchedulingNo'), |
| | | }, |
| | | ] |
| | | |
| | |
| | | body: { |
| | | options: [ |
| | | [ |
| | | { code: 'copyChecked', name: '选中相同', prefixIcon: 'vxe-icon-copy', visible: true, disabled: false }, |
| | | { code: 'copyAll', name: '之后相同', prefixIcon: 'vxe-icon-feedback', visible: true, disabled: false }, |
| | | { code: 'clearChecked', name: '清除选中', prefixIcon: 'vxe-icon-indicator', visible: true, disabled: false }, |
| | | { code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false }, |
| | | { code: 'copyAll', name: t('basicData.sameAfterwards'), prefixIcon: 'vxe-icon-feedback', visible: true, disabled: false }, |
| | | { code: 'clearChecked', name: t('basicData.clearSelection'), prefixIcon: 'vxe-icon-indicator', visible: true, disabled: false }, |
| | | ] |
| | | ] |
| | | } |
| | |
| | | //表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'checkbox', fixed: "left", title: '选择', width: 80}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {type: 'checkbox', fixed: "left", title: t('basicData.check'), width: 80}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | { |
| | | field: 'scheduled_start_time', |
| | | width: 120, |
| | | editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}}, |
| | | title: '计划开始时间' |
| | | title: t('processCard.scheduledStartTime') |
| | | }, |
| | | { |
| | | field: 'plan_end_time', |
| | | width: 120, |
| | | editRender: {name: 'input', attrs: {placeholder: '', type: 'date'}}, |
| | | title: '计划结束时间' |
| | | title: t('processCard.planEndTime') |
| | | }, |
| | | // {field: '排产编号', title: '排产编号', width: 120 }, |
| | | { |
| | | field: 'order_id', |
| | | title: '销售单号', |
| | | title: t('order.orderId'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | width: 100, |
| | |
| | | }, |
| | | { |
| | | field: 'customer_name', |
| | | title: '客户名称', |
| | | title: t('processCard.customerName'), |
| | | width: 110, |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | |
| | | }, |
| | | { |
| | | field: 'project', |
| | | title: '项目名称', |
| | | title: t('order.project'), |
| | | width: 100, |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | |
| | | }, |
| | | { |
| | | field: 'order_number', |
| | | title: '序号', |
| | | title: t('order.OrderNum'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | width: 70, |
| | |
| | | }, |
| | | { |
| | | field: 'technology_number', |
| | | title: '小片顺序', |
| | | title: t('processCard.technologyNumber'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | width: 70, |
| | |
| | | }, |
| | | { |
| | | field: 'child_width', |
| | | title: '宽', |
| | | title: t('order.width'), |
| | | width: 60, |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | |
| | | }, |
| | | { |
| | | field: 'child_height', |
| | | title: '高', |
| | | title: t('order.height'), |
| | | width: 60, |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | {field: 'quantity', title: '订单数量', width: 70}, |
| | | {field: 'area', title: '订单面积', width: 90}, |
| | | {field: 'quantity', title: t('processCard.orderQuantity'), width: 70}, |
| | | {field: 'area', title: t('processCard.orderArea'), width: 90}, |
| | | { |
| | | field: 'scheduling_quantity', |
| | | width: 120, |
| | | editRender: {name: 'input', attrs: {placeholder: ''}}, |
| | | title: '排产数量', |
| | | title: t('processCard.productionSchedulingQuantity'), |
| | | sortable: true |
| | | }, |
| | | {field: 'pendingProductionQuantity', title: '待排产数量', width: 120}, |
| | | {field: 'pendingProductionArea', title: '待排产面积', width: 120}, |
| | | {field: 'productionScheduledQuantity', title: '已排产数量', width: 120}, |
| | | {field: 'productionScheduledArea', title: '已排产面积', width: 120}, |
| | | {field: 'review_status', title: '审核状态', width: 140}, |
| | | {field: 'reviewer', title: '审核人', width: 140}, |
| | | {field: 'glass_child', title: '产品名称', width: 140}, |
| | | {field: 'shape', title: '形状', width: 80}, |
| | | {field: 'notes', title: '备注', editRender: {name: 'input', attrs: {placeholder: ''}}, width: 120}, |
| | | {field: 'scheduling_id', title: '排产编号', width: 120}, |
| | | {field: 'pendingProductionQuantity', title: t('processCard.quantityToScheduled'), width: 120}, |
| | | {field: 'pendingProductionArea', title: t('processCard.areaToScheduled'), width: 120}, |
| | | {field: 'productionScheduledQuantity', title: t('processCard.plannedProductionQuantity'), width: 120}, |
| | | {field: 'productionScheduledArea', title: t('processCard.plannedProductionArea'), width: 120}, |
| | | {field: 'review_status', title: t('processCard.reviewedState'), width: 140}, |
| | | {field: 'reviewer', title: t('processCard.reviewed'), width: 140}, |
| | | {field: 'glass_child', title: t('order.product'), width: 140}, |
| | | {field: 'shape', title: t('order.shape'), width: 80}, |
| | | {field: 'notes', title: t('processCard.notes'), editRender: {name: 'input', attrs: {placeholder: ''}}, width: 120}, |
| | | {field: 'scheduling_id', title: t('processCard.schedulingId'), width: 120}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {code: 'delete', name: '删除', status: 'primary'}, |
| | | {code: 'review', name: '审核', status: 'primary'}, |
| | | {code: 'save', name: '排产', status: 'primary', icon: 'vxe-icon-save'}, |
| | | {code: 'delete', name: t('basicData.delete'), status: 'primary'}, |
| | | {code: 'review', name: t('basicData.review'), status: 'primary'}, |
| | | {code: 'save', name: t('processCard.scheduling'), status: 'primary', icon: 'vxe-icon-save'}, |
| | | ], |
| | | import: false, |
| | | // export: true, |
| | |
| | | |
| | | /> |
| | | |
| | | <el-input v-model="form.orderId" clearable placeholder="销售单号" style="width: 110px"></el-input> |
| | | <el-input v-model="form.orderId" clearable :placeholder="$t('order.orderId')" style="width: 110px"></el-input> |
| | | |
| | | <el-select v-model="value" clearable default-value="default_city" style="width: 120px"> |
| | | <el-option |
| | |
| | | <el-button |
| | | id="select" |
| | | :icon="Search" |
| | | type="primary" @click="getWorkOrder">查询 |
| | | type="primary" @click="getWorkOrder">{{$t('basicData.search')}} |
| | | </el-button> |
| | | </el-row> |
| | | |
| | |
| | | import deepClone from "@/utils/deepClone"; |
| | | import {ElDatePicker, ElMessage} from "element-plus"; |
| | | import {Search} from "@element-plus/icons-vue"; |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | let router=useRouter() |
| | | const getTableRow = (row,type) =>{ |
| | | switch (type) { |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | {title: '操作', width: 80, slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: '自序', width: 50 }, |
| | | {field: 'order.orderId', title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' } , }, |
| | | {field: 'order.customerName', title: '客户名称',showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.project', title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.batch', title: '批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, }, |
| | | {field: 'order.otherRemarks', title: '原片要求' ,showOverflow:"ellipsis",filters:[{ data: '' },],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.icon', title: '商标选项',filters:[{ data: '' }],slots: { filter: 'num1_filter' } }, |
| | | {field: 'order.orderType', title: '订单类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' } }, |
| | | {field: 'order.salesman', title: '业务员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.processingNote', title: '加工要求',showOverflow:"ellipsis"}, |
| | | {field: 'order.deliveryAddress', title: '送货地址',}, |
| | | {title: t('basicData.operate'), width: 80, slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 }, |
| | | {field: 'order.orderId', title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } , }, |
| | | {field: 'order.customerName', title: t('processCard.customerName'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.project', title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.batch', title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, }, |
| | | {field: 'order.otherRemarks', title: t('processCard.otherRemarks') ,showOverflow:"ellipsis",filters:[{ data: '' },],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.icon', title:t('order.icon'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } }, |
| | | {field: 'order.orderType', title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } }, |
| | | {field: 'order.salesman', title: t('order.salesman'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order.processingNote', title: t('order.processingNote'),showOverflow:"ellipsis"}, |
| | | {field: 'order.deliveryAddress', title: t('order.deliveryAddress'),}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | // if (footList.includes(column.field)) { |
| | | // return sumNum(data, column.field) |
| | |
| | | type="daterange" |
| | | format="YYYY/MM/DD" |
| | | value-format="YYYY-MM-DD" |
| | | start-placeholder="开始时间" |
| | | end-placeholder="结束时间" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | :default-time="defaultTime" |
| | | |
| | | /> |
| | |
| | | <el-button |
| | | @click="getWorkOrder" |
| | | id="select" |
| | | type="primary" :icon="Search">查询 |
| | | type="primary" :icon="Search">{{$t('basicData.search')}} |
| | | </el-button> |
| | | </el-row> |
| | | |
| | |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('basicData.edit')}}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | rowIndex:{} |
| | | }) |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | //表尾求和 |
| | | const sumNum = (list, field) => { |
| | | let count = 0 |
| | |
| | | }) |
| | | } |
| | | |
| | | //点击查询 |
| | | const getWorkOrder = () => { |
| | | |
| | | let startTime = form.date1[0] |
| | | let endTime = form.date1[1] |
| | | request.post(`/processCard/flowCard/${startTime}/${endTime}`, filterData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | |
| | | pageTotal.value = res.data.total |
| | | xGrid.value.loadData(res.data.data) |
| | | gridOptions.loading = false |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | //页脚跳转 |
| | | const handlePageChange = ({ currentPage, pageSize }) => { |
| | |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | { type: 'seq',fixed:"left", title: '自序', width: 50 }, |
| | | {field: 'orderId', title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 80 }, |
| | | {field: 'processId', width: 130, title: '流程卡号' ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderDetail.productId', title: '产品编号' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'orderDetail.productName', title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 180}, |
| | | {field: 'order.project', title: '项目名称' ,showOverflow:"ellipsis"}, |
| | | {field: 'quantity', title: '数量', }, |
| | | {field: 'orderDetail.computeGrossArea', title: '面积', }, |
| | | {field: 'order_id', title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 80 }, |
| | | {field: 'process_id', width: 130, title: '流程卡号' ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'order_number', title: '订单序号' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'quantity', title: '数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 180}, |
| | | {field: 'area', title: '面积' ,showOverflow:"ellipsis"}, |
| | | {field: 'product_name', title: '产品名称', }, |
| | | {field: 'founder', title: '分架员', }, |
| | | {field: 'orderDetail.processingNote', title: '加工要求', }, |
| | | {field: 'layoutStatus', title: '排版状态', } |
| | | {field: 'splitFrame_time', title: '分架时间', }, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | |
| | | <template> |
| | | <div class="main-div-customer"> |
| | | <div id="selectForm"> |
| | | <el-row :gutter="0"> |
| | | <el-date-picker |
| | | v-model="form.date1" |
| | | type="daterange" |
| | | format="YYYY/MM/DD" |
| | | value-format="YYYY-MM-DD" |
| | | start-placeholder="开始时间" |
| | | end-placeholder="结束时间" |
| | | :default-time="defaultTime" |
| | | |
| | | /> |
| | | |
| | | <el-button |
| | | @click="getWorkOrder" |
| | | id="select" |
| | | type="primary" :icon="Search">查询 |
| | | </el-button> |
| | | </el-row> |
| | | |
| | | </div> |
| | | <vxe-grid |
| | | max-height="100%" |
| | | @filter-change="filterChanged" |
| | |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | |
| | | <template #button_slot="{ row }" > |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">打印</el-button> |
| | | <el-button v-if="row.layoutStatus=='可排版'" @click="getTableRow(row,'setType')" link type="primary" size="small">排版</el-button> |
| | | <el-button v-else-if="row.layoutStatus=='不可排版'" @click="getTableRow(row,'setType')" link type="primary" size="small">可排版</el-button> |
| | | <el-button v-else-if="row.layoutStatus=='已排版'" disabled @click="getTableRow(row,'setType')" link type="primary" size="small">排版</el-button> |
| | | <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | | <div> |
| | |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <template #pager> |
| | | <!--使用 pager 插槽--> |
| | | <!-- 'PrevJump','NextJump', --> |
| | | <vxe-pager |
| | | @page-change="handlePageChange" |
| | | :layouts="[ 'PrevPage', 'Jump','PageCount', 'NextPage', 'Total']" |
| | | v-model:current-page="pageNum" |
| | | v-model:page-size="total.pageSize" |
| | | v-model:pager-count="total.pageTotal" |
| | | :total="total.dataTotal" |
| | | > |
| | | </vxe-pager> |
| | | </template> |
| | | |
| | | |
| | | </vxe-grid> |
| | | </div> |
| | |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | let productGlassTypeStore = useProductGlassTypeStore() |
| | | let router = useRouter() |
| | | let props = defineProps({ |
| | |
| | | if (state=='可排版'){ |
| | | request.post(`/processCard/updateLayoutStatus/${row.processId}/2`).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("排版成功") |
| | | ElMessage.success(t('processCard.typesettingSuccess') |
| | | ) |
| | | router.push({path: '/main/processCard/SelectProcessCard', query: {random:Math.random()}}) |
| | | } else { |
| | | |
| | |
| | | else if(state=='不可排版'){ |
| | | request.post(`/processCard/updateLayoutStatus/${row.processId}/1`).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("修改成功") |
| | | ElMessage.success(t('processCard.modifySuccessfully')) |
| | | router.push({path: '/main/processCard/SelectProcessCard', query: {random:Math.random()}}) |
| | | } else { |
| | | |
| | |
| | | case 'delete': { |
| | | request.post(`/processCard/deleteFlowCard/${row.orderId}/${row.processId}`).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("删除成功") |
| | | ElMessage.success(t('workOrder.deleteOk')) |
| | | router.push({path: '/main/processCard/SelectProcessCard', query: {random:Math.random()}}) |
| | | } else { |
| | | |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | {title: '操作', width: 160, slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: '自序', width: 50 }, |
| | | {field: 'orderId', title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 80 }, |
| | | {field: 'processId', width: 130, title: '流程卡号' ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderDetail.productId', title: '产品编号' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'orderDetail.productName', title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 180}, |
| | | {field: 'order.project', title: '项目名称' ,showOverflow:"ellipsis"}, |
| | | {field: 'quantity', title: '数量', }, |
| | | {field: 'orderDetail.computeGrossArea', title: '面积', }, |
| | | {field: 'founder', title: '分架员', }, |
| | | {field: 'orderDetail.processingNote', title: '加工要求', }, |
| | | {field: 'layoutStatus', title: '排版状态', } |
| | | {title: t('basicData.operate'), width: 160, slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 }, |
| | | {field: 'orderId', title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 80 }, |
| | | {field: 'processId', width: 130, title: t('processCard.processId') ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderDetail.productId', title: t('order.productId') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'orderDetail.productName', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 180}, |
| | | {field: 'order.project', title: t('order.project') ,showOverflow:"ellipsis"}, |
| | | {field: 'quantity', title: t('order.quantity'), }, |
| | | {field: 'orderDetail.computeGrossArea', title: t('order.area'), }, |
| | | {field: 'founder', title: t('processCard.founder'), }, |
| | | {field: 'orderDetail.processingNote', title: t('order.processingNote'), }, |
| | | {field: 'layoutStatus', title: t('processCard.layoutStatus'), } |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | // if (props.tableProp.footList.includes(column.field)) { |
| | | // return sumNum(data, column.field) |
| | |
| | | type="daterange" |
| | | format="YYYY/MM/DD" |
| | | value-format="YYYY-MM-DD" |
| | | start-placeholder="开始时间" |
| | | end-placeholder="结束时间" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | :default-time="defaultTime" |
| | | |
| | | /> |
| | |
| | | <el-button |
| | | @click="getWorkOrder" |
| | | id="select" |
| | | type="primary" :icon="Search">查询 |
| | | type="primary" :icon="Search">{{$t('basicData.search')}} |
| | | |
| | | </el-button> |
| | | </el-row> |
| | | |
| | |
| | | <!--左边固定显示的插槽--> |
| | | |
| | | <template #button_slot="{ row }" > |
| | | <el-button @click="getTableRow(row,'select')" link type="primary" size="small">编辑</el-button> |
| | | <el-button v-if="row.layoutStatus=='可排版'" @click="getTableRow(row,'setType')" link type="primary" size="small">排版</el-button> |
| | | <el-button v-else-if="row.layoutStatus=='不可排版'" @click="getTableRow(row,'setType')" link type="primary" size="small">可排版</el-button> |
| | | <el-button v-else-if="row.layoutStatus=='已排版'" disabled @click="getTableRow(row,'setType')" link type="primary" size="small">排版</el-button> |
| | | <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button> |
| | | <el-button @click="getTableRow(row,'select')" link type="primary" size="small">{{$t('basicData.edit')}} |
| | | </el-button> |
| | | <el-button v-if="row.layoutStatus=='可排版'" @click="getTableRow(row,'setType')" link type="primary" size="small">{{$t('processCard.composing')}}</el-button> |
| | | <el-button v-else-if="row.layoutStatus=='不可排版'" @click="getTableRow(row,'setType')" link type="primary" size="small">{{$t('processCard.composingOk')}}</el-button> |
| | | <el-button v-else-if="row.layoutStatus=='已排版'" disabled @click="getTableRow(row,'setType')" link type="primary" size="small">{{$t('processCard.typesetter')}}</el-button> |
| | | <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | let router=useRouter() |
| | | const getTableRow = (row,type) =>{ |
| | | switch (type) { |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | {title: '操作', width: 80, slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: '自序', width: 50 }, |
| | | {field: 'orderId', title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, }, |
| | | {field: 'orderGlassDetail.productionId', title: '生产订单号', showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderDetail.productId', title: '产品编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderDetail.productName', title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'orderDetail.quantity', title: '总数量',showOverflow:"ellipsis"}, |
| | | {field: 'orderDetail.computeGrossArea', title: '总面积', }, |
| | | {field: 'orderDetail.perimeter', title: '周长',}, |
| | | {title: t('basicData.operate'), width: 80, slots: { default: 'button_slot' },fixed:"left"}, |
| | | { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 }, |
| | | {field: 'orderId', title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, }, |
| | | {field: 'orderGlassDetail.productionId', title: t('workOrder.productionId'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderDetail.productId', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'orderDetail.productName', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },}, |
| | | {field: 'orderDetail.quantity', title: t('order.quantity'),showOverflow:"ellipsis"}, |
| | | {field: 'orderDetail.computeGrossArea', title: t('order.area'), }, |
| | | {field: 'orderDetail.perimeter', title: t('workOrder.perimeter'),}, |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | |
| | | return[ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('basicData.edit')}}</el-button> |
| | | |
| | | </template> |
| | | |
| | |
| | | import {indexOf} from "xe-utils"; |
| | | import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove"; |
| | | import userInfo from "@/stores/userInfo" |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | let brokenVisible = ref(false) |
| | | const xGrid = ref() |
| | | const brokenGrid =ref() |
| | |
| | | // {type:'expand',fixed:"left",slots: { content:'content' },width: 50}, |
| | | { |
| | | field: 'order_number', |
| | | title: '序号', |
| | | title: t('order.OrderNum'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'glass_child', |
| | | title: '单片名称', |
| | | title: t('reportingWorks.glassChild'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | |
| | | }, |
| | | { |
| | | field: 'technology_number', |
| | | title: '标记', |
| | | title: t('processCard.technologyNumber'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'glass_address', |
| | | title: '片标记', |
| | | title: t('reportingWorks.glassAddress'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'quantity_card', |
| | | title: '流程卡数量', |
| | | title: t('reportingWorks.numberProcessCards'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | showOverflow: "ellipsis", |
| | |
| | | }, |
| | | { |
| | | field: 'child_width', |
| | | title: '宽', |
| | | title: t('order.width'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'child_height', |
| | | title: '高', |
| | | title: t('order.height'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged |
| | | }, |
| | | { |
| | | field: 'shape', |
| | | title: '形状', |
| | | title: t('order.shape'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | showOverflow: "ellipsis", |
| | | filterMethod: filterChanged |
| | | }, |
| | | {field: 'quantity', title: '可报数量',}, |
| | | {field: 'quantity', title: t('reportingWorks.reportableQuantityOk'),}, |
| | | { |
| | | field: 'completedQuantity', title: '完工数量',width: 120, |
| | | field: 'completedQuantity', title: t('reportingWorks.completedQuantity'),width: 120, |
| | | editRender: { |
| | | name: 'input', |
| | | attrs: {placeholder: ''} |
| | |
| | | |
| | | }, |
| | | { |
| | | field: 'breakageQuantity', title: '次破数量', |
| | | field: 'breakageQuantity', title: t('reportingWorks.quantityBroken'), |
| | | }, |
| | | {field: 'completed', width: 90, title: '已完工',}, |
| | | {field: 'onceBroken', width: 90, title: '已次破',}, |
| | | {field: 'completed', width: 90, title:t('reportingWorks.completed'),}, |
| | | {field: 'onceBroken', width: 90, title: t('reportingWorks.onceBroken'),}, |
| | | |
| | | ], |
| | | //表单验证 |
| | |
| | | // {code: 'sameDamage', name: '次破相同'}, |
| | | // {code: 'sameOneCompletion', name: '完工一列相同'}, |
| | | // {code: 'sameOneDamage', name: '次破一列相同'}, |
| | | {code: 'saveReportingWork', name: '保存', status: 'primary', icon: 'vxe-icon-save',disabled:true}, |
| | | {code: 'saveReportingWorkReview', name: '保存并审核', status: 'primary', icon: 'vxe-icon-save',disabled:true}, |
| | | {code: 'saveReportingWork', name: t('basicData.save'), status: 'primary', icon: 'vxe-icon-save',disabled:true}, |
| | | {code: 'saveReportingWorkReview', name: t('reportingWorks.saveAndReview'), status: 'primary', icon: 'vxe-icon-save',disabled:true}, |
| | | ], |
| | | // import: false, |
| | | // export: true, |
| | |
| | | return [ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | return '' |
| | | }) |
| | |
| | | showStatus: true |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'seq',fixed:"left", title: '自序', width: 80 }, |
| | | {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 }, |
| | | // { |
| | | // field: 'order_number', |
| | | // title: '序号' |
| | |
| | | |
| | | { |
| | | field: 'breakageQuantity', |
| | | title: '次破数量', |
| | | title: t('reportingWorks.quantityBroken'), |
| | | editRender: {name: 'input', attrs: {placeholder: ''}} |
| | | }, |
| | | {field: 'available', |
| | | title: '可利用', |
| | | title: t('reportingWorks.available'), |
| | | slots: {default: 'available'} |
| | | }, |
| | | {field: 'returnProcess', title: '退回工序', |
| | | {field: 'returnProcess', title: t('reportingWorks.returnProcess'), |
| | | editRender: {}, |
| | | slots: {default: 'returnProcess_default', edit: 'returnProcess'} |
| | | }, |
| | | { |
| | | field: 'breakageType', title: '次破类型', |
| | | field: 'breakageType', title: t('reportingWorks.breakageType'), |
| | | editRender: {}, |
| | | slots: {default: 'breakageType_default', edit: 'breakageType'} |
| | | }, |
| | | { |
| | | field: 'breakageReason', title: '次破原因', |
| | | field: 'breakageReason', title: t('reportingWorks.breakageReason'), |
| | | editRender: {}, |
| | | slots: {default: 'breakageReason_default', edit: 'breakageReason'} |
| | | }, |
| | | { |
| | | field: 'responsibleProcess', title: '责任工序', |
| | | field: 'responsibleProcess', title: t('reportingWorks.responsibleProcess'), |
| | | editRender: {}, |
| | | slots: {default: 'responsibleProcess_default', edit: 'responsibleProcess'} |
| | | }, |
| | | { |
| | | field: 'responsibleEquipment', |
| | | title: '责任设备', |
| | | title: t('reportingWorks.responsibleEquipment'), |
| | | editRender: {}, |
| | | slots: {default: 'reportingDeviceSort_default', edit: 'reportingDeviceSort'} |
| | | // editRender: {name: 'input', attrs: {placeholder: ''}} |
| | | }, |
| | | |
| | | { |
| | | field: 'responsibleTeam', title: '责任班组', |
| | | field: 'responsibleTeam', title: t('reportingWorks.responsibleTeam'), |
| | | editRender: {}, |
| | | slots: {default: 'responsibleTeam_default', edit: 'responsibleTeam'} |
| | | }, |
| | | { |
| | | field: 'responsiblePersonnel', |
| | | title: '责任人员', |
| | | title: t('reportingWorks.responsiblePersonnel'), |
| | | editRender: {name: 'input', attrs: {placeholder: ''}} |
| | | |
| | | }, |
| | |
| | | }, |
| | | toolbarConfig: {//表头按钮 |
| | | buttons: [ |
| | | {code: 'addRow', name: '添加', status: 'primary', icon: 'vxe-icon-square-plus'}, |
| | | {code: 'removeRow', name: '删除', status: 'primary', icon: 'vxe-icon-delete'}, |
| | | {code: 'addRow', name: t('reportingWorks.increase'), status: 'primary', icon: 'vxe-icon-square-plus'}, |
| | | {code: 'removeRow', name: t('basicData.delete'), status: 'primary', icon: 'vxe-icon-delete'}, |
| | | ], |
| | | // import: false, |
| | | // export: true, |
| | |
| | | } |
| | | |
| | | //判断早晚班 |
| | | titleUploadData.value.classes='早班' |
| | | titleUploadData.value.classes=t('reportingWorks.early') |
| | | titleUploadData.value.reportingWorkTime = formatCurrentTime() |
| | | //绑定下方表格 |
| | | detail.value = res.data.Detail |
| | |
| | | /> |
| | | </el-select> |
| | | |
| | | <el-button :disabled="disabledFlag" :loading="loadingFlag" @click="reviewReportingWork" type="primary">审核通过</el-button> |
| | | <el-button :disabled="disabledFlag" :loading="loadingFlag" @click="reviewReportingWork" type="primary">{{$t('reportingWorks.passAudit')}} |
| | | </el-button> |
| | | <!-- <el-button type="primary">审核不通过</el-button>--> |
| | | |
| | | <label>流程卡面积:xxx平方米</label> |
| | | <label>{{$t('reportingWorks.processCardArea')}}:</label> |
| | | </div> |
| | | <div style="background-color: white;margin-bottom: 5px;height: 17%;width: 100%"> |
| | | <el-row> |
| | | <el-col :span="2"> |
| | | <el-text>销售单号:</el-text> |
| | | <el-text>{{$t('order.orderId')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-text>{{ titleUploadData.orderId }}</el-text> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>生产订单号:</el-text> |
| | | <el-text>{{$t('workOrder.productionId')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-text>{{ titleUploadData.productionId }}</el-text> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>客户编码:</el-text> |
| | | <el-text>{{$t('processCard.customerId')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>{{ titleUploadData.order.customerId }}</el-text> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>客户名称:</el-text> |
| | | <el-text>{{$t('processCard.customerName')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-text class="customClass"></el-text> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>项目名称:</el-text> |
| | | <el-text>{{$t('order.project')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-text wrap-text="false">{{ titleUploadData.order.project }}</el-text> |
| | |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="2"> |
| | | <el-text>报工设备:</el-text> |
| | | <el-text>{{$t('reportingWorks.deviceType')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-select v-model="titleUploadData.deviceName" clearable placeholder="请选择设备"> |
| | | <el-select v-model="titleUploadData.deviceName" clearable :placeholder="$t('reportingWorks.pleaseDevice')"> |
| | | <el-option |
| | | v-for="item in titleSelectJson['deviceType']" |
| | | :key="item.id" |
| | |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>上工序:</el-text> |
| | | <el-text>{{$t('reportingWorks.previousProcess')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | |
| | | <el-text>{{ titleUploadData.previousProcess }}</el-text> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>可报工数量:</el-text> |
| | | <el-text>{{$t('reportingWorks.numberReported')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>{{ titleUploadData.previousProcessQuantity }}</el-text> |
| | | |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>本工序完工:</el-text> |
| | | <el-text>{{$t('reportingWorks.thisCompletedQuantity')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-text>{{ titleUploadData.thisCompletedQuantity }}</el-text> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>本工序次破:</el-text> |
| | | <el-text>{{$t('reportingWorks.thisWornQuantity')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-text>{{ titleUploadData.thisWornQuantity }}</el-text> |
| | |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="2"> |
| | | <el-text>报工班组:</el-text> |
| | | <el-text>{{$t('reportingWorks.teamsType')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-select v-model="titleUploadData.teamsGroupsName" clearable placeholder="请选择班组"> |
| | | <el-select v-model="titleUploadData.teamsGroupsName" clearable :placeholder="$t('reportingWorks.selectTeam')"> |
| | | <el-option |
| | | v-for="item in titleSelectJson['teamsType']" |
| | | :key="item.id" |
| | |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>班次:</el-text> |
| | | <el-text>{{$t('reportingWorks.classes')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-select v-model="titleUploadData.classes" class="processesSt" placeholder=""> |
| | | <el-select v-model="titleUploadData.classes" class="processesSt" :placeholder="$t('reportingWorks.selectClasses')"> |
| | | <el-option |
| | | v-for="item in classesOption" |
| | | :key="item.value" |
| | |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>下工序:</el-text> |
| | | <el-text>{{$t('reportingWorks.nextProcess')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>{{ titleUploadData.nextProcess }}</el-text> |
| | | |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>报工日期:</el-text> |
| | | <el-text>{{$t('reportingWorks.reportingWorkTime')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-date-picker |
| | |
| | | /> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-text>备注:</el-text> |
| | | <el-text>{{$t('basicData.remarks')}}:</el-text> |
| | | </el-col> |
| | | <el-col :span="3"> |
| | | <el-input v-model="titleUploadData.notes" placeholder="" /> |
| | |
| | | v-model="brokenVisible" |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false" |
| | | title="破损列表" |
| | | :title="$t('reportingWorks.damageList')" |
| | | style="width: 80%;height:75% "> |
| | | <vxe-grid |
| | | |
| | |
| | | import {ElMessage} from "element-plus"; |
| | | import {useRouter,useRoute} from "vue-router"; |
| | | import GlassType from '@/components/basic/product/GlassType.vue' |
| | | |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | |
| | | const router = useRouter() |
| | | const route = useRoute() |
| | |
| | | <div id="main"> |
| | | <div id="div-title"> |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/reportingWorks/SelectReportingWorks' }">报工管理</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/reportingWorks/AddReportingWork' }">报工新增</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/reportingWorks/QualityInspectionReview' }">质检审核</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/reportingWorks/SelectReportingWorks' }">{{$t('reportingWorks.WorkReportingManagement')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/reportingWorks/AddReportingWork' }">{{$t('reportingWorks.addReportingWorks')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/reportingWorks/QualityInspectionReview' }">{{$t('reportingWorks.qualityInspectionReview')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">打印</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | import useUserInfoStore from "@/stores/userInfo"; |
| | | |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | let router = useRouter() |
| | | const userStore = useUserInfoStore() |
| | | const username = userStore.user.userName |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {type: 'checkbox', fixed: "left", title: '选择', width: 80}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {field: 'orderId', title: '销售单号', filters: [{data: ''}], slots: {filter: 'num1_filter'},}, |
| | | {field: 'productId',title: '产品编号',showOverflow: "ellipsis",filters: [{data: ''}],slots: {filter: 'num1_filter'}}, |
| | | {field: 'productName', title: '产品名称', filters: [{data: ''}], slots: {filter: 'num1_filter'}, }, |
| | | {field: 'quantity', title: '总数量', }, |
| | | {field: 'computeGrossArea', title: '总面积', }, |
| | | {field: 'perimeter', title: '周长', showOverflow: "ellipsis"} |
| | | {type: 'checkbox', fixed: "left", title: t('basicData.check'), width: 80}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | {field: 'orderId', title: t('order.orderId'), filters: [{data: ''}], slots: {filter: 'num1_filter'},}, |
| | | {field: 'productId',title: t('order.productId'),showOverflow: "ellipsis",filters: [{data: ''}],slots: {filter: 'num1_filter'}}, |
| | | {field: 'productName', title: t('order.product'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, }, |
| | | {field: 'quantity', title: t('order.quantity'), }, |
| | | {field: 'computeGrossArea', title: t('order.area'), }, |
| | | {field: 'perimeter', title: t('workOrder.perimeter'), showOverflow: "ellipsis"} |
| | | ],//表头按钮 |
| | | |
| | | toolbarConfig: { |
| | | buttons: [ |
| | | {code: 'saveWorkOrder', name: '保存', status: 'primary', icon: 'vxe-icon-save'}, |
| | | {code: 'saveWorkOrder', name: t('basicData.save'), status: 'primary', icon: 'vxe-icon-save'}, |
| | | ], |
| | | // import: false, |
| | | // export: true, |
| | |
| | | return [ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | |
| | | request.post("/workOrder/addOrderWork", workOrderData.value).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("保存成功") |
| | | ElMessage.success(t('basicData.msg.saveSuccess')) |
| | | location.reload(); |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | router.push("/login") |
| | | // router.push("/login") |
| | | } |
| | | }) |
| | | |
| | |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | |
| | | let productGlassTypeStore = useProductGlassTypeStore() |
| | | let router = useRouter() |
| | |
| | | case 'delete': { |
| | | request.post(`/workOrder/deleteOrderWork/${row.orderId}/${row.orderDetail.productName}`).then((res) => { |
| | | if (res.code == 200) { |
| | | ElMessage.success("删除成功") |
| | | ElMessage.success(t('workOrder.deleteOk')) |
| | | location.reload(); |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | |
| | | const options = [ |
| | | { |
| | | value: '0', |
| | | label: '已转', |
| | | label: t('workOrder.convert'), |
| | | }, |
| | | { |
| | | value: '1', |
| | | label: '未转', |
| | | label: t('workOrder.unConverted'), |
| | | }, |
| | | ] |
| | | |
| | |
| | | },//表头参数 |
| | | columns: [ |
| | | {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {title: '操作', width: 110, slots: {default: 'button_slot'}, fixed: "left"}, |
| | | {type: 'seq', fixed: "left", title: '自序', width: 50}, |
| | | {field: 'orderId', title: '销售单号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110}, |
| | | {title: t('basicData.operate'), width: 110, slots: {default: 'button_slot'}, fixed: "left"}, |
| | | {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50}, |
| | | {field: 'orderId', title: t('order.orderId'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110}, |
| | | { |
| | | field: 'productionId', |
| | | title: '生产订单号', |
| | | title: t('workOrder.productionId'), |
| | | showOverflow: "ellipsis", |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'} |
| | | , width: 130 |
| | | }, |
| | | {field: 'order.batch', title: '批次', filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110}, |
| | | {field: 'orderDetail.productName', title: '产品名称', filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 210}, |
| | | {field: 'orderDetail.computeArea', title: '单片总面积', showOverflow: "ellipsis", width: 110}, |
| | | {field: 'orderDetail.quantity', title: '总数量', width: 70}, |
| | | {field: 'orderDetail.computeGrossArea', title: '成品总面积',}, |
| | | {field: 'orderDetail.perimeter', title: '周长', showOverflow: "ellipsis"}, |
| | | {field: 'orderDetail.bendRadius', title: '半径',}, |
| | | {field: 'orderDetail.processingNote', title: '加工要求',} |
| | | {field: 'order.batch', title: t('order.batch'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110}, |
| | | {field: 'orderDetail.productName', title: t('order.product'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 210}, |
| | | {field: 'orderDetail.computeArea', title: t('order.area'), showOverflow: "ellipsis", width: 110}, |
| | | {field: 'orderDetail.quantity', title: t('order.quantity'), width: 70}, |
| | | {field: 'orderDetail.computeGrossArea', title: t('order.trueGrossArea'),}, |
| | | {field: 'orderDetail.perimeter', title: t('workOrder.perimeter'), showOverflow: "ellipsis"}, |
| | | {field: 'orderDetail.bendRadius', title: t('order.trueGrossArea'),}, |
| | | {field: 'orderDetail.processingNote', title: t('order.processingNote'),} |
| | | ],//表头按钮 |
| | | data: null,//表格数据 |
| | | toolbarConfig: { |
| | |
| | | return [ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | return t('basicData.total') |
| | | } |
| | | if (footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | |
| | | type="daterange" |
| | | format="YYYY/MM/DD" |
| | | value-format="YYYY-MM-DD" |
| | | start-placeholder="开始时间" |
| | | end-placeholder="结束时间" |
| | | :start-placeholder="$t('basicData.startDate')" |
| | | :end-placeholder="$t('basicData.endDate')" |
| | | :default-time="defaultTime" |
| | | |
| | | /> |
| | | |
| | | <el-select :default-first-option="true" ref="getSelect" style="width: 120px" v-model="optionVal" class="m-2" |
| | | placeholder="是否转工单"> |
| | | <el-select :default-first-option="true" ref="getSelect" style="width: 130px" v-model="optionVal" class="m-2" |
| | | > |
| | | <el-option |
| | | v-for="item in options" |
| | | :key="item.value" |
| | |
| | | @click="getWorkOrder(isButtonDisabled)" |
| | | :disabled="isButtonDisabled" |
| | | id="select" |
| | | type="primary" :icon="Search">查询 |
| | | type="primary" :icon="Search">{{$t('basicData.search')}} |
| | | </el-button> |
| | | </el-row> |
| | | |
| | |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | <template #button_slot="{ row }"> |
| | | <el-button :class="{disable: optionVal== 0}" :disabled="optionVal == 0" @click="getTableRow(row,'edit')" link type="primary" size="small">转工单</el-button> |
| | | <el-button :class="{disable: optionVal== 1}" :disabled="optionVal == 1" @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button> |
| | | <el-button :class="{disable: optionVal== 0}" :disabled="optionVal == 0" @click="getTableRow(row,'edit')" link type="primary" size="small">{{$t('workOrder.transferOrder')}}</el-button> |
| | | <el-button :class="{disable: optionVal== 1}" :disabled="optionVal == 1" @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button> |
| | | </template> |
| | | |
| | | <template #num1_filter="{ column, $panel }"> |
| | |
| | | import {ElMessage} from "element-plus"; |
| | | import {useRoute, useRouter} from "vue-router"; |
| | | import GlassType from '@/components/basic/product/GlassType.vue' |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | | const { t } = useI18n() |
| | | const router = useRouter() |
| | | const route = useRoute() |
| | | |
| | | let indexFlag=$ref(1) |
| | | function changeRouter(index){ |
| | | indexFlag=index |
| | |
| | | <div id="main"> |
| | | <div id="div-title"> |
| | | <el-breadcrumb :separator-icon="ArrowRight"> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/workOrder/SelectWorkOrder' }">工单管理</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/workOrder/SelectWorkOrder' }">{{$t('workOrder.workOrder')}}</el-breadcrumb-item> |
| | | <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">打印</el-breadcrumb-item> |
| | | </el-breadcrumb> |
| | | </div> |
| | |
| | | round(ogd.child_width * ogd.child_height * fc.quantity / 1000000, 2) as area, |
| | | od.product_name, |
| | | fc.founder, |
| | | fc.splitFrame_time |
| | | date(fc.splitFrame_time) as splitFrame_time |
| | | from flow_card as fc |
| | | left join sd.order_glass_detail as ogd |
| | | on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and |
| | |
| | | round(ogd.child_width * ogd.child_height * fc.quantity / 1000000, 2) as area, |
| | | od.product_name, |
| | | fc.founder, |
| | | fc.splitFrame_time |
| | | date(fc.splitFrame_time) as splitFrame_time |
| | | from flow_card as fc |
| | | left join sd.order_glass_detail as ogd |
| | | on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and |