chenlu
2024-03-13 033fb309b323e1e6b50d79bc6dd628d427e3ac11
Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override

# Conflicts:
# north-glass-erp/northglass-erp/src/lang/en.js
# north-glass-erp/northglass-erp/src/lang/zh.js
41个文件已修改
2048 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/lang/en.js 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/zh.js 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/LoginView.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/CreateProductStock.vue 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedGoodsIssue.vue 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedProductOut.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedProductRework.vue 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/OrderAllocation.vue 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/ProductStock.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/ProductStockList.vue 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/ReworkRecord.vue 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/TakeOutRecord.vue 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/TransferRecord.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/Replenish/AddReplenish.vue 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/Replenish/Replenish.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/Replenish/SelectReplenish.vue 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/rework/AddRework.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/rework/Rework.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/rework/SelectRework.vue 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/customer/CreateCustomer.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/customer/Customer.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/customer/SelectCustomer.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue 125 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/delivery/Delivery.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectDelivery.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectOrderList.vue 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue 168 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/Order.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/order/UpdateOrderCraft.vue 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/product/CreateProduct.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/sd/DeliveryController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/userInfo/SysMenuController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/DeliveryMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/FinishedGoodsInventory.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/ReworkMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/Delivery.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/target/classes/mapper/mm/FinishedGoodsInventory.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/target/classes/mapper/pp/ReworkMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/target/classes/mapper/sd/Delivery.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/en.js
@@ -4,13 +4,11 @@
        pwErr:'Please enter your password',
        loginSuccessful:'User login successful',
        connectErr:'server connection failed',
        user:'user',
        password:'pass',
        user:'User',
        password:'Pass',
        SysName:'North Glass ERP System',
        login:'login',
        register:'register',
        login:'Login',
        register:'Register',
    },
    main:{
        connectErr:'The server connection is abnormal. Please try again later',
@@ -37,6 +35,7 @@
        search:'Search',
        startDate:'Start Date',
        endDate:'End Date',
        reportData:'Report Data',
        msg:{
            max255:"The value contains a maximum of 255 characters",
            range99999Dec2:
@@ -107,8 +106,42 @@
        }
    },
    //工单管理
    searchOrder:{
        createOrder:'Create',
        production:'Production',
        process:'Process',
        storage:'Storage',
        delivery:'Delivery',
        inventoryNum:'InventoryNum',
        perimeter:'Perimeter',
        regularOrders:'Regular Orders',
        cancelledOrders:'Cancelled Orders',
        allOrders:'All Orders',
        msg:'Please select a piece of data',
        msgDelete:'Reviewed orders cannot be deleted',
        msgDeleteFail:'Fail to delete',
        msgDeleteSuccess:'Successfully delete',
        deleteConfirm:'Confirm order deletion?',
        orderType:'Order Type',
    },
    craft:{
        glassAddress:'Glass Address',
        glassChild:'GlassChild',
        width:'Width',
        height:'Height',
        totalArea:'TotalArea',
        childWidth:'Child Width',
        childHeight:'Child Height',
        area:'Area',
        process:'Process',
        orderDetail:'Order Detail',
        updateCraft:'Update Process',
        technologicalProcess:'Technological Process',
        processAttribute:'Process Attribute',
        oldProcess:'Old Process',
        newProcess:'New Process',
        reset:'Reset',
    },
    workOrder:{
        workOrder:'Work Order Management',
        productionId:'Production Order Number',
@@ -247,6 +280,170 @@
        passAudit:'Pass The Audit',
    },
    productStock:{
        inventoryQuery:'Stock Inquiry',
        finishedProductWarehousing:"Finished product Into Stock ",
        finishedProductOutbound:'Finished Product Out Of Stock',
        finishedProductOrderReturn:"Return Finished Order ",
        reportForms:"Report Forms",
        remarks:"Remarks",
        outbound:'Outbound',
        orderTransfer:'Order Allocation',
        finishedProductPickup:"Finished Goods Delivery ",
        finishedProductRework:"Finished Goods Reprocessing ",
        pleaseEnterTheStorageLocation:'Please input stock no',
        pleaseEnterANote:"Please input remarks ",
        completedQuantity:'Finished Quantity',
        finishedProductInventory:"Finished Product Stock ",
        confirmOutbound:'Delivery Confirmation',
        confirmReceiptOfGoods:'Warehousing Confirmation',
        receivedSuccessfully:'Successfully entered the warehouse',
        deliverySuccessful:"Successfully transferred out of warehouse ",
        successfullyRetrieved:'Successfully claimed',
        reworkSuccessful:'Successfully rework',
        transferSuccessful:'Successfully mutual exchange',
        reviewSuccessful:'Successfully review ',
        invalidSuccessfully:'Successfully cancel',
        reverseReviewSuccessful:'Successfully re-audit',
        confirmWithdrawal:'Take Out Confirmation',
        pickingOutRecords:'Take Out Records',
        confirmTransfer:'Mutual Exchange Confirmation',
        transferRecords:'Mutual Exchange Records',
        reworkConfirmation:'Rework Confirmation',
        reworkRecords:'Rework Records',
        pleaseSelectTheTypeOfWithdrawal:'Please select the type of withdrawal',
        pleaseSelectTheTypeOfRework:'Please select the type of rework',
        receivedQuantity:'Received Quantity',
        reworkQuantity:'Rework Quantity',
        transferQuantity:'Mutual Exchange Quantity',
        receivedReworkedQuantity:'Received/Reworked Quantity',
        inventoryQuantity:'Inventory Quantity',
        availableQuantity:'Available Quantity',
        newOrderNumber:'New Order Number',
        newOrderId:'New Order Id',
        transferOrderNumber:'Mutual Exchange Order Number',
        operationOrderNumber:'Operation Order Number',
        inventoryArea:'Inventory Location',
        dataVerificationFailed:'Fail data check',
        unselectedData:'No data selected',
        pleaseEnterAPositiveInteger:'Please enter a positive integer',
        pleaseEnterTheOrderIdForTheTransfer:'Please enter the order id for the transfer',
        pleaseEnterTheOrderNumberForTheTransfer:'Please enter the order number for the transfer',
        theTransferQuantityCannotBeGreaterThanTheOrderQuantity:'The quantity of mutual exchange cannot be greater than the number of orders',
        transferQuantityCannotBeEmptyOr0:'The quantity of mutual exchange cannot be empty or 0',
        theClaimedQuantityCannotBeGreaterThanTheOrderQuantity:'The claimed quantity cannot be greater than the number of orders',
        claimedQuantityCannotBeEmptyOr0:'The claimed quantity cannot be empty or 0',
        theReworkQuantityCannotBeGreaterThanTheOrderQuantity:'The quantity of rework cannot be greater than the number of orders',
        reworkQuantityCannotBeEmptyOr0:'Rework quantity cannot be empty or 0',
        storageTime:'Warehouse Entry Time',
        outboundTime:'Time Of Leaving The Warehouse',
        modificationTime:'modification Time',
        productionDate:'Production Date',
        statementDate:'Statement Date',
        approvedDate:'Approved Date',
        creator:'Document Making Staff',
        reviewed:'Audit Staff',
        documentStatus:'Document Status',
        status:'Status',
        totalNumberOfOrders :'Total Number Of Orders',
        quantityAlreadyInStock:'Quantity Already In Stock',
        totalArea:'Total Area',
        singlePieceArea:'Single Piece Area',
        perimeter:'Perimeter',
        returnToWarehouse:'Return To Warehouse',
    },
    customer:{
        pleaseEnterTheCustomerName:'Please enter the customer name',
        pleaseEnterCustomerLevel:"Please enter customer level ",
        pleaseEnterTheAmountOfFunds:'Please enter the amount of funds',
        pleaseEnterTheContactAddress:"Please enter the contact address ",
        pleaseEnterTheContactPerson:"Please enter the contact person ",
        pleaseEnterTheContactPhoneNumber:"Please enter the contact phone number",
        customerGrade:'Customer Grade',
        moneyLimit:"Money Limit ",
        address:"Address ",
        contacts:'Contacts',
        telephone:"Telephone ",
        customerNumber:'Customer Id',
        customerName:"Customer",
        customerHomePage:'Customer Homepage',
        increaseCustomers:'Increase Customers',
        resetting:'Resetting',
    },
    delivery:{
        delivery:'Delivery',
        place :'Place',
        technology:'Technology',
        produce:'Produce',
        traveler:'Traveler',
        warehousing:'Warehousing',
        unpaidQuantity:"Unpaid  Quantity ",
        availableStock:'Available Stock',
        deliveryQuantity:'Delivery Quantity',
        pleaseEnterTheAmountOfFunds:'Please enter the project name',
        pleaseSelectPaymentTerms:"Please select payment terms ",
        pleaseEnterThePaymentMethod:"Please enter the payment method ",
        pleaseSelectTheSameCustomerOrder:'Please select the same customer order',
        deliveryNoteSubmittedSuccessfully:"Delivery note submitted successfully",
        pleaseEnterANumericalValueGreaterThanOrEqualTo0:'Please enter a numerical value greater than or equal to 0',
        theShipmentQuantityCannotBeGreaterThanTheInventoryQuantity:"The shipment quantity cannot be greater than the inventory quantity ",
        theShipmentQuantityCannotBeEmptyOr0:"The shipment quantity cannot be empty or 0 ",
        paymentTerms:'Payment Terms',
        paymentDate:"Payment Date ",
        selectDate:'Select Date',
        paymentMethod:"Payment Method ",
        shippingAddress:'Shipping Address',
        deliveryReportDate:'Delivery Report Date',
        shipper:"Shipper ",
        shippingHomepage:'Shipping Homepage',
        orderShipment:"Order Shipment ",
        deliveryNoteId:'Delivery Note Id',
        deliveryNoteNumber:'Delivery Note Number',
        deliveryDate:"Delivery Date ",
    },
    replenish:{
        patchManagement:'Patch Management',
        addPatches:"Add Patches ",
        printPatches:'Print Patches',
        patchNumber:'Patch Number',
        mark:'Mark',
        sliceMarking:'Slice Marking',
    },
    rework:{
        reworkManagement:'Rework Management',
        addRework:"Add Rework ",
        printRework:'Print Rework',
        reworkNumber:'Rework Number',
        reworkTeam:'Rework Team',
        reasonForRework:"Reason For Rework ",
        reworkProcess:'Rework Process',
        reworkType:'Rework Type',
        reworkArea:'Rework Area',
        PleaseSelectAReworkTeam:'Please select a rework team',
        TheReworkQuantityCannotBeGreaterThanTheSecondBreakQuantity:'The rework quantity cannot be greater than the second break quantity',
        reworkQuantityCannotBeEmptyOr0:'Rework quantity cannot be empty or 0',
    }
}
north-glass-erp/northglass-erp/src/lang/zh.js
@@ -35,6 +35,7 @@
        search:'查询',
        startDate:'开始时间',
        endDate:'结束时间',
        reportData:'报表日期',
        msg:{
            max255:"最多输入255个字符",
            range99999Dec2:
@@ -105,6 +106,44 @@
        }
    },
    searchOrder:{
        createOrder:'下单',
        production:'工单',
        process:'流程',
        storage:'入库',
        delivery:'发货',
        inventoryNum:'库存数',
        perimeter:'周长',
        regularOrders:'正常订单',
        cancelledOrders:'作废订单',
        allOrders:'所有订单',
        msg:'请选择一条数据',
        msgDelete:'已审核的订单不能删除',
        msgDeleteFail:'删除失败',
        msgDeleteSuccess:'删除成功',
        deleteConfirm:'确认删除订单?',
        orderType:'订单类型',
    },
    craft:{
        glassAddress:'标记',
        glassChild:'子产品',
        width:'成品宽',
        height:'成品高',
        totalArea:'总尺寸',
        childWidth:'单片宽',
        childHeight:'单片高',
        area:'单片尺寸',
        process:'工艺流程',
        orderDetail:'订单详情',
        updateCraft:'修改工艺',
        technologicalProcess:'工艺流程',
        processAttribute:'工艺属性',
        oldProcess:'原流程',
        newProcess:'流程',
        reset:'重置',
    },
    workOrder:{
        workOrder:'工单管理',
        productionId:'生产订单号',
@@ -246,6 +285,174 @@
    },
    productStock:{
        inventoryQuery:'库存查询',
        finishedProductWarehousing:"成品入库 ",
        finishedProductOutbound:'成品出库',
        finishedProductOrderReturn:"成品订单退货 ",
        reportForms:"报表 ",
        remarks:"备注",
        outbound:'出库',
        orderTransfer:'订单调拨',
        finishedProductPickup:"成品领出 ",
        finishedProductRework:"成品返工 ",
        pleaseEnterTheStorageLocation:'请输入库位',
        pleaseEnterANote:"请输入备注 ",
        completedQuantity:'完工数量',
        finishedProductInventory:"成品库存 ",
        confirmOutbound:'确认出库',
        confirmReceiptOfGoods:'确认入库',
        receivedSuccessfully:'入库成功',
        deliverySuccessful:"出库成功 ",
        successfullyRetrieved:'领出成功',
        reworkSuccessful:'返工成功',
        transferSuccessful:'调拨成功',
        reviewSuccessful:'审核成功',
        invalidSuccessfully:'返库成功',
        reverseReviewSuccessful:'反审成功',
        confirmWithdrawal:'确认领出',
        pickingOutRecords:'领出记录',
        confirmTransfer:'确认调拨',
        transferRecords:'调拨记录',
        reworkConfirmation:'返工确认',
        reworkRecords:'返工记录',
        pleaseSelectTheTypeOfWithdrawal:'请选择领出类型',
        pleaseSelectTheTypeOfRework:'请选择返工类型',
        receivedQuantity:'领出数量',
        reworkQuantity:'返工数量',
        transferQuantity:'调拨数量',
        receivedReworkedQuantity:'领出/返工数量',
        inventoryQuantity:'库存数量',
        availableQuantity:'可用数量',
        newOrderNumber:'新订单序号',
        newOrderId:'新订单号',
        transferOrderNumber:'调拨单号',
        operationOrderNumber:'操作单号',
        inventoryArea:'库存区域',
        dataVerificationFailed:'数据校验失败',
        unselectedData:'未选中数据',
        pleaseEnterAPositiveInteger:'请输入正整数',
        pleaseEnterTheOrderIdForTheTransfer:'请输入调拨的订单号',
        pleaseEnterTheOrderNumberForTheTransfer:'请输入调拨的订单序号',
        pheTransferQuantityCannotBeGreaterThanTheOrderQuantity:'调拨数量不能大于订单数',
        transferQuantityCannotBeEmptyOr0:'调拨数量不能为空或者是0',
        theClaimedQuantityCannotBeGreaterThanTheOrderQuantity:'领出数量不能大于订单数',
        claimedQuantityCannotBeEmptyOr0:'领出数量不能为空或者是0',
        theReworkQuantityCannotBeGreaterThanTheOrderQuantity:'返工数量不能大于订单数',
        reworkQuantityCannotBeEmptyOr0:'返工数量不能为空或者是0',
        storageTime:'入库时间',
        outboundTime:'出库时间',
        modificationTime:'修改时间',
        productionDate:'制单日期',
        statementDate:'报表日期',
        approvedDate:'审核日期',
        creator:'制单人',
        reviewed:'审核人',
        documentStatus:'单据状态',
        status:'状态',
        totalNumberOfOrders :'订单总数',
        quantityAlreadyInStock:'已入数量',
        totalArea:'总面积',
        singlePieceArea:'单片面积',
        perimeter:'周长',
        returnToWarehouse:'返库',
    },
    customer:{
        pleaseEnterTheCustomerName:'请输入客户名称',
        pleaseEnterCustomerLevel:"请输入客户等级 ",
        pleaseEnterTheAmountOfFunds:'请输入金额额度',
        pleaseEnterTheContactAddress:"请输入联系地址 ",
        pleaseEnterTheContactPerson:"请输入联系人 ",
        pleaseEnterTheContactPhoneNumber:"请输入联系电话",
        customerGrade:'客户等级',
        moneyLimit:"金额额度 ",
        address:"地址 ",
        contacts:'联系人',
        telephone:"联系电话 ",
        customerNumber:'客户编号',
        customerName:"客户名称 ",
        customerHomePage:'客户首页',
        increaseCustomers:'客户新增',
        resetting:'重置',
    },
    delivery:{
        delivery:'发货',
        place :'下单',
        technology:'工艺',
        produce:'生产',
        traveler:'流程卡',
        warehousing:'入库',
        unpaidQuantity:"未发数量 ",
        availableStock:'可用库存',
        deliveryQuantity:'发货数量',
        pleaseEnterTheAmountOfFunds:'请输入项目名称',
        pleaseSelectPaymentTerms:"请选择付款条件 ",
        pleaseEnterThePaymentMethod:"请输入收款方式 ",
        pleaseSelectTheSameCustomerOrder:'请选择相同的客户订单',
        deliveryNoteSubmittedSuccessfully:"发货单提交成功",
        pleaseEnterANumericalValueGreaterThanOrEqualTo0:'请输入大于等于0的数值',
        theShipmentQuantityCannotBeGreaterThanTheInventoryQuantity:"发货数量不能大于库存数 ",
        theShipmentQuantityCannotBeEmptyOr0:"发货数量不能为空或者是0 ",
        paymentTerms:'付款条件',
        paymentDate:"收款日期 ",
        selectDate:'选择日期',
        paymentMethod:"收款方式 ",
        shippingAddress:'送货地址',
        deliveryReportDate:'发货报表日期',
        shipper:"发货员 ",
        shippingHomepage:'发货首页',
        orderShipment:"订单发货 ",
        deliveryNoteId:'发货单号',
        deliveryNoteNumber:'发货序号',
        deliveryDate:"发货日期 ",
    },
    replenish:{
        patchManagement:'补片管理',
        addPatches:"补片新增 ",
        printPatches:'补片打印',
        patchNumber:'补片单号',
        mark:'标记',
        sliceMarking:'片标记',
    },
    rework:{
        reworkManagement:'返工管理',
        addRework:"返工新增 ",
        printRework:'返工打印',
        reworkNumber:'返工单号',
        reworkTeam:'返工班组',
        reasonForRework:"返工原因 ",
        reworkProcess:'返工工序',
        reworkType:'返工类型',
        reworkArea:'返工面积',
        PleaseSelectAReworkTeam:'请选择返工班组',
        TheReworkQuantityCannotBeGreaterThanTheSecondBreakQuantity:'返工数量不能大于次破数量',
        reworkQuantityCannotBeEmptyOr0:'返工数量不能为空或者是0',
    }
north-glass-erp/northglass-erp/src/views/LoginView.vue
@@ -35,7 +35,7 @@
const validatePass = (rule: any, value: any, callback: any) => {
  if (value === '') {
    callback(new Error(t('login.psErr')))
    callback(new Error(  t('login.psErr')  ))
  } else {
    callback()
  }
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/CreateProductStock.vue
@@ -7,6 +7,10 @@
import VXETable from "vxe-table";
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
const username = userStore.user.userName
@@ -196,28 +200,27 @@
  },//表头参数
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: '60'},
    { type: 'checkbox',fixed:"left", title: '选择', width: '80' },
    { type: 'seq',fixed:"left", title: '自序', width: '80' },
    // {title: '操作', width: '220', slots: { default: 'button_slot' },fixed:"left"},
    {field: 'order.orderId', width: '150',title: '销售单号', showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.buildingNumber', width: '120',title: '楼号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: '产品编号', filters:[{ data: '' }],showOverflow:"ellipsis",slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '100', title: '产品名称', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: '宽度', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: '高度', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.creater', width: '100',title: '业务员', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '100',title: '项目名称', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderNumber',width: '140', title: '订序', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.quantity',width: '140', title: '订单总数', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'inventoryQuantity',width: '100', title: '完工数量', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.area',width: '140', title: '面积', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'processId',width: '100', title: '流程卡号', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'receivedQuantity',width: '100', title: '已入数量', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.batch',width: '100', title: '批次', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    { type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' },
    { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    {field: 'order.orderId', width: '150',title: t('order.orderId'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    //{field: 'orderDetail.buildingNumber', width: '120',title: '楼号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: t('order.productId'), filters:[{ data: '' }],showOverflow:"ellipsis",slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '100', title: t('order.product'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: t('order.width'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: t('order.height'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.creater', width: '100',title: t('order.salesman'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '100',title: t('order.project'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderNumber',width: '140', title: t('order.OrderNum'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.quantity',width: '140', title: t('productStock.totalNumberOfOrders'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'inventoryQuantity',width: '100', title: t('productStock.completedQuantity'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.area',width: '140', title: t('order.area'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'processId',width: '100', title: t('processCard.processId'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'receivedQuantity',width: '100', title: t('productStock.quantityAlreadyInStock'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.batch',width: '100', title: t('order.batch'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  ],//表头按钮
  toolbarConfig: {
    buttons: [{
      'name': '确认入库',status: 'primary',
      'name': t('productStock.confirmReceiptOfGoods'),status: 'primary',
      'code':'add'
    }
      ],
@@ -232,7 +235,7 @@
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return `合计`
          return t('basicData.total')
        }
        return ''
@@ -265,7 +268,7 @@
              request.post("/FinishedGoodsInventory/addSelectWarehousing",flowData.value).then((res) => {
                if(res.code==200){
                  ElMessage.success("入库成功")
                  ElMessage.success(t('productStock.receivedSuccessfully'))
                  router.push({path:'/main/productStock/CreateProductStock',query:{random:Math.random()}})
                }else{
                  ElMessage.warning(res.msg)
@@ -289,9 +292,9 @@
<template>
  <div class="main-div-customer">
    <div id="selectForm">
        <el-input style="width: 200px" v-model="storageRegion" class="m-2" placeholder="请输入库位">
        <el-input style="width: 200px" v-model="storageRegion" class="m-2" :placeholder="$t('productStock.pleaseEnterTheStorageLocation')">
      </el-input>
        <el-input style="width: 200px" v-model="remark" class="m-2" placeholder="请输入备注">
        <el-input style="width: 200px" v-model="remark" class="m-2" :placeholder="$t('productStock.pleaseEnterANote')">
        </el-input>
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedGoodsIssue.vue
@@ -10,6 +10,10 @@
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
const username = userStore.user.userName
@@ -38,17 +42,17 @@
          if (selectRecords.length > 0) {
            const errMap = await $grid.validate(selectRecords)
            if (errMap) {
              ElMessage.warning("数据校验失败")
              ElMessage.warning(t('productStock.dataVerificationFailed'))
              return
            }
          } else {
            ElMessage.warning("未选中数据")
            ElMessage.warning(t('productStock.unselectedData'))
            return
          }
          const operatetype = operateType._rawValue
          if(operatetype === null || operatetype === undefined || operatetype === ''){
            ElMessage.warning("请选择领出类型")
            ElMessage.warning(t('productStock.pleaseSelectTheTypeOfWithdrawal'))
            return
          }
@@ -63,7 +67,7 @@
          })
          request.post("/FinishedGoodsInventory/updateFinishedGoodsInventoryTakeOut",flowData.value).then((res) => {
            if(res.code==200){
              ElMessage.success("领出成功")
              ElMessage.success(t('productStock.successfullyRetrieved'))
              router.push({path:'/main/productStock/FinishedGoodsIssue',query:{random:Math.random()}})
            }else{
              ElMessage.warning(res.msg)
@@ -260,7 +264,7 @@
    body: {
      options: [
        [
          { code: 'copyChecked', name: '选中相同', prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
          { code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
        ]
      ]
    }
@@ -282,29 +286,29 @@
  },//表头参数
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: '50'},
    { type: 'checkbox',fixed:"left", title: '选择', width: '80' },
    { type: 'seq',fixed:"left", title: '自序', width: '80' },
    {field: 'finishedGoodsInventory.orderId', width: '150',title: '销售单号',showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '150',title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productId',width: '150', title: '产品编号', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productName', width: '150',title: '产品名称', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.quantityAvailable',width: '140', title: '数量', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity',width: '140', title: '领出数量',editRender: { name: 'input', attrs: { placeholder: '' } }},
    {field: 'order.customerId', width: '100',title: '客户编号', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.customerName',width: '150', title: '客户名称', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'width', width: '100',title: '长度', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'height',width: '100', title: '宽度', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.actualSignalArea',width: '140', title: '单片面积', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.area',width: '150', title: '总面积', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.storageRegion',width: '100', title: '库存区域', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    { type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' },
    { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    {field: 'finishedGoodsInventory.orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '150',title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productId',width: '150', title: t('order.productId'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productName', width: '150',title: t('order.productId'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.quantityAvailable',width: '140', title: t('order.quantity'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity',width: '140', title: t('productStock.receivedQuantity'),editRender: { name: 'input', attrs: { placeholder: '' } }},
    {field: 'order.customerId', width: '100',title: t('customer.customerNumber'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.customerName',width: '150', title: t('customer.customerName'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'width', width: '100',title: t('order.width'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'height',width: '100', title: t('order.height'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.actualSignalArea',width: '140', title: t('productStock.singlePieceArea'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.area',width: '150', title: t('productStock.totalArea'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.storageRegion',width: '100', title: t('productStock.inventoryArea'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  ],//表头按钮
  toolbarConfig: {
    buttons: [{
      'name': '确认领出',
      'name': t('productStock.confirmWithdrawal'),
      'code': 'verify',
      status: 'primary'
    },{
      'name': '领出记录','code':'out',
      'name': t('productStock.pickingOutRecords'),'code':'out',
    }],
    /*import: false,
   export: true,
@@ -317,7 +321,7 @@
    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)
@@ -334,13 +338,13 @@
  quantity: [{
    validator (e) {
      if (e.row.quantity > e.row.finishedGoodsInventory.quantityAvailable) {
        return new Error('领出数量不能大于订单数')
        return new Error(t('productStock.theClaimedQuantityCannotBeGreaterThanTheOrderQuantity'))
      }else if (e.row.quantity ==="") {
        return new Error('领出数量不能为空或者是0')
        return new Error(t('productStock.claimedQuantityCannotBeEmptyOr0'))
      }
      const regex = /^[1-9]\d*$/g
      if ( !regex.test(e.row.quantity) ) {
        return new Error('请输入正整数')
        return new Error(t('productStock.pleaseEnterAPositiveInteger'))
      }
    }
@@ -359,11 +363,11 @@
<template>
  <div class="main-div-customer">
    <vxe-select v-model="operateType" placeholder="请选择领出类型">
    <vxe-select style="width: 260px" v-model="operateType" :placeholder="$t('productStock.pleaseSelectTheTypeOfWithdrawal')">
      <vxe-option v-for="(item,index) in takeOut" :key="index" :value="item.operateTypeName" :label="item.operateTypeName" ></vxe-option>
    </vxe-select>
    &nbsp;
    <vxe-input v-model="remarks" placeholder="备注"></vxe-input>
    <vxe-input v-model="remarks" :placeholder="$t('productStock.pleaseEnterANote')"></vxe-input>
    <vxe-grid
        max-height="100%"
@@ -386,12 +390,7 @@
        </ul>
      </template>
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">订单调拨</el-button>
        <el-button @click="getTableRow(row,'out')" link type="primary" size="small">成品领出</el-button>
        <el-button @click="getTableRow(row,'back')" link type="primary" size="small">成品返工</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
        <div>
@@ -427,4 +426,11 @@
  width: 99%;
  height: 100%;
}
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
</style>
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedProductOut.vue
@@ -6,6 +6,10 @@
import deepClone from "@/utils/deepClone"
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
const username = userStore.user.userName
@@ -196,31 +200,30 @@
  },//表头参数
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: '60'},
    { type: 'checkbox',fixed:"left", title: '选择', width: '80' },
    { type: 'seq',fixed:"left", title: '自序', width: '80' },
    {title: '操作', width: '80', slots: { default: 'button_slot' },fixed:"left"},
    {field: 'deliveryDetail.deliveryId', width:'150', title: '送货单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
    {field: 'deliveryDetail.orderNumber', width:'150', title: '送货序号 ',filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
    {field: 'deliveryDetail.orderId', width: '150',title: '销售单号',showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'deliveryDetail.orderNumber',width: '100', title: '订单序号', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '120',title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productId', width: '100',title: '产品编号', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productName',width: '200', title: '产品名称', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'deliveryNum',width: '100', title: '发货数量', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'warehouseNum',width: '140', title: '库存数量', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'delivery.customerName',width: '200', title: '客户名称', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'width', width: '100',title: '宽度', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'height',width: '100', title: '高度', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'delivery.area',width: '100', title: '总面积', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'buildingNumber',width: '100', title: '楼层编号', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'delivery.creator',width: '100', title: '业务员', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'deliveryDetail.createTime',width: '140', title: '报表日期', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    //{field: 'Status',width: '100', title: '状态', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'deliveryDetail.deliveryDetailRemakes',width: '80', title: '备注', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    { type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' },
    { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    {title: t('basicData.operate'), width: '80', slots: { default: 'button_slot' },fixed:"left"},
    {field: 'deliveryDetail.deliveryId', width:'150', title:  t('delivery.deliveryNoteId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
    {field: 'deliveryDetail.orderNumber', width:'150', title:  t('delivery.deliveryNoteNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
    {field: 'deliveryDetail.orderId', width: '150',title:  t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'deliveryDetail.orderNumber',width: '100', title: t('order.OrderNum'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '120',title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productId', width: '100',title: t('order.productId'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productName',width: '200', title: t('order.product'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'deliveryNum',width: '100', title: t('delivery.deliveryQuantity'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'warehouseNum',width: '140', title: t('productStock.inventoryQuantity'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'delivery.customerName',width: '200', title: t('customer.customerName'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'width', width: '100',title: t('order.width'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'height',width: '100', title: t('order.height'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'delivery.area',width: '100', title: t('productStock.totalArea'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    //{field: 'buildingNumber',width: '100', title: '楼层编号', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'delivery.creator',width: '100', title: t('order.salesman'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'deliveryDetail.createTime',width: '140', title: t('productStock.statementDate'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'deliveryDetail.deliveryDetailRemakes',width: '80', title: t('productStock.remarks'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  ],//表头按钮
  toolbarConfig: {
    buttons: [{
      'name': '确认出库',
      'name': t('productStock.confirmOutbound'),
      status: 'primary',
      'code':'ver'
    }],
@@ -237,7 +240,7 @@
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return `合计`
          return t('basicData.total')
        }
        return ''
@@ -259,6 +262,11 @@
          if ($table) {
            const selectRecords = $table.getCheckboxRecords()
            if (selectRecords.length <= 0) {
              ElMessage.warning(t('productStock.unselectedData'))
              return
            }
            let orderDetailData = ref({
              userId:userid,
              userName:username,
@@ -267,7 +275,7 @@
            request.post("/FinishedGoodsInventory/addDeliveryDetail",orderDetailData.value).then((res) => {
              if(res.code==200){
                ElMessage.success("出库成功")
                ElMessage.success(t('productStock.deliverySuccessful'))
                router.push({path:'/main/productStock/FinishedProductOut',query:{random:Math.random()}})
              }else{
                ElMessage.warning(res.msg)
@@ -315,7 +323,7 @@
      <!--左边固定显示的插槽-->
      <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>
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/FinishedProductRework.vue
@@ -11,6 +11,10 @@
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
const username = userStore.user.userName
const userid = userStore.user.userId
@@ -38,17 +42,17 @@
            if (selectRecords.length > 0) {
              const errMap = await $grid.validate(selectRecords)
              if (errMap) {
                ElMessage.warning("数据校验失败")
                ElMessage.warning(t('productStock.dataVerificationFailed'))
                return
              }
            } else {
              ElMessage.warning("未选中数据")
              ElMessage.warning(t('productStock.unselectedData'))
              return
            }
          const operatetype = operateType._rawValue
          if(operatetype === null || operatetype === undefined || operatetype === ''){
            ElMessage.warning("请选择返工类型")
            ElMessage.warning(t('productStock.pleaseSelectTheTypeOfRework'))
            return
          }
@@ -63,7 +67,7 @@
          })
          request.post("/FinishedGoodsInventory/updateFinishedGoodsInventoryRework", flowData.value).then((res) => {
            if (res.code == 200) {
              ElMessage.success("返工成功")
              ElMessage.success(t('productStock.reworkSuccessful'))
              router.push({path:'/main/productStock/FinishedProductRework',query:{random:Math.random()}})
            } else {
              ElMessage.warning(res.msg)
@@ -258,7 +262,7 @@
    body: {
      options: [
        [
          { code: 'copyChecked', name: '选中相同', prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
          { code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
        ]
      ]
    }
@@ -280,30 +284,30 @@
  },//表头参数
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: '50'},
    { type: 'checkbox',fixed:"left", title: '选择', width: '80' },
    { type: 'seq',fixed:"left", title: '自序', width: '80' },
    {field: 'finishedGoodsInventory.orderId', width: '150',title: '销售单号',showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '150',title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productId',width: '150', title: '产品编号', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productName', width: '150',title: '产品名称', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.quantityAvailable',width: '140', title: '数量', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity',width: '140', title: '返工数量',editRender: { name: 'input', attrs: { placeholder: '' } }},
    {field: 'order.customerId', width: '100',title: '客户编号', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.customerName',width: '150', title: '客户名称', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'width', width: '100',title: '长度', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'height',width: '100', title: '宽度', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.actualSignalArea',width: '140', title: '单片面积', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.area',width: '150', title: '总面积', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.storageRegion',width: '100', title: '库存区域', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    { type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' },
    { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    {field: 'finishedGoodsInventory.orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '150',title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productId',width: '150', title: t('order.productId'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'productName', width: '150',title: t('order.product'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.quantityAvailable',width: '140', title: t('order.quantity'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity',width: '140', title: t('productStock.reworkQuantity'),editRender: { name: 'input', attrs: { placeholder: '' } }},
    {field: 'order.customerId', width: '100',title: t('customer.customerNumber'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.customerName',width: '150', title: t('customer.customerName'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'width', width: '100',title: t('order.width'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'height',width: '100', title: t('order.height'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.actualSignalArea',width: '140', title: t('productStock.singlePieceArea'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.area',width: '150', title: t('productStock.totalArea'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.storageRegion',width: '100', title:t('productStock.inventoryArea'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  ],//表头按钮
  toolbarConfig: {
    buttons: [{
      'name': '返工确认',
      'name': t('productStock.reworkConfirmation'),
      status: 'primary',
      'code':'ver'
    },
      {
      'name': '返工记录',
      'name': t('productStock.reworkRecords'),
        'code':'rework'
    }],
    /*import: false,
@@ -317,7 +321,7 @@
    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)
@@ -334,13 +338,13 @@
  quantity: [{
    validator (e) {
      if (e.row.quantity > e.row.finishedGoodsInventory.quantityAvailable) {
        return new Error('返工数量不能大于订单数')
        return new Error(t('productStock.theReworkQuantityCannotBeGreaterThanTheOrderQuantity'))
      }else if (e.row.quantity ==="") {
        return new Error('返工数量不能为空或者是0')
        return new Error(t('productStock.reworkQuantityCannotBeEmptyOr0'))
      }
      const regex = /^[1-9]\d*$/g
      if ( !regex.test(e.row.quantity) ) {
        return new Error('请输入正整数')
        return new Error(t('productStock.pleaseEnterAPositiveInteger'))
      }
    }
@@ -356,11 +360,11 @@
<template>
  <div class="main-div-customer">
    <vxe-select v-model="operateType" placeholder="请选择返工类型">
    <vxe-select v-model="operateType" :placeholder="$t('productStock.pleaseSelectTheTypeOfRework')">
      <vxe-option v-for="(item,index) in takeOut" :key="index" :value="item.operateTypeName" :label="item.operateTypeName" ></vxe-option>
    </vxe-select>
    &nbsp;
    <vxe-input v-model="remarks" placeholder="备注"></vxe-input>
    <vxe-input v-model="remarks" :placeholder="$t('productStock.pleaseEnterANote')"></vxe-input>
    <vxe-grid
        max-height="100%"
@@ -383,12 +387,7 @@
        </ul>
      </template>
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">订单调拨</el-button>
        <el-button @click="getTableRow(row,'out')" link type="primary" size="small">成品领出</el-button>
        <el-button @click="getTableRow(row,'back')" link type="primary" size="small">成品返工</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
        <div>
@@ -427,4 +426,11 @@
  width: 99%;
  height: 100%;
}
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
</style>
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/OrderAllocation.vue
@@ -11,6 +11,10 @@
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
const username = userStore.user.userName
@@ -175,7 +179,7 @@
    body: {
      options: [
        [
          { code: 'copyChecked', name: '选中相同', prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
          { code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
        ]
      ]
    }
@@ -197,30 +201,30 @@
  },//表头参数
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: '50'},
    { type: 'checkbox',fixed:"left", title: '选择', width: '80' },
    // { type: 'seq',fixed:"left", title: '自序', width: '80' },
    { type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' },
     { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    // {title: '操作', width: '80', slots: { default: 'button_slot' },fixed:"left"},
    {field: 'finishedGoodsInventory.orderId', width: '150',title: '销售单号',showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '120',title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.orderNumber', width: '120',title: '当前序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.quantityAvailable',width: '140', title: '订单数量'},
    {field: 'orderId', width: '150',title: '调拨单号',editRender: { name: 'input', attrs: { placeholder: '' } }, showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderNumber', width:'150', title: '新订序', editRender: { name: 'input', attrs: { placeholder: '' } } },
    {field: 'quantity',width: '120', title: '调拨数量',editRender: { name: 'input', attrs: { placeholder: '' } }},
    {field: 'productId', width: '120',title: '产品编号'},
    {field: 'productName',width: '140', title: '产品名称'},
    {field: 'order.customerId', width: '100',title: '客户编号'},
    {field: 'order.customerName',width: '140', title: '客户名称'},
    {field: 'width', width: '100',title: '宽度'},
    {field: 'height',width: '100', title: '高度'},
    {field: 'finishedGoodsInventory.actualSignalArea',width: '140', title: '单片面积'},
    {field: 'finishedGoodsInventory.area',width: '100', title: '总面积'},
    {field: 'finishedGoodsInventory.storageRegion',width: '100', title: '库存区域'},
    {field: 'finishedGoodsInventory.orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '120',title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.orderNumber', width: '120',title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'finishedGoodsInventory.quantityAvailable',width: '140', title: t('productStock.totalNumberOfOrders')},
    {field: 'orderId', width: '150',title: t('productStock.newOrderId'),editRender: { name: 'input', attrs: { placeholder: '' } }, showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderNumber', width:'150', title: t('productStock.newOrderNumber'), editRender: { name: 'input', attrs: { placeholder: '' } } },
    {field: 'quantity',width: '120', title: t('productStock.transferQuantity'),editRender: { name: 'input', attrs: { placeholder: '' } }},
    {field: 'productId', width: '120',title: t('order.productId')},
    {field: 'productName',width: '140', title: t('order.product')},
    {field: 'order.customerId', width: '100',title: t('customer.customerNumber')},
    {field: 'order.customerName',width: '140', title: t('customer.customerName')},
    {field: 'width', width: '100',title: t('order.width')},
    {field: 'height',width: '100', title: t('order.height')},
    {field: 'finishedGoodsInventory.actualSignalArea',width: '140', title: t('productStock.singlePieceArea')},
    {field: 'finishedGoodsInventory.area',width: '100', title: t('productStock.totalArea')},
    {field: 'finishedGoodsInventory.storageRegion',width: '100', title: t('productStock.inventoryArea')},
  ],//表头按钮
  toolbarConfig: {
    buttons: [
        {'name': '确认调拨',status: 'primary','code':'edit'},
        {'name': '调拨记录','code':'record'}
        {'name': t('productStock.confirmTransfer'),status: 'primary','code':'edit'},
        {'name': t('productStock.transferRecords'),'code':'record'}
    ],
    /*import: false,
   export: true,
@@ -233,7 +237,7 @@
    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)
@@ -258,11 +262,11 @@
            if (selectRecords.length > 0) {
              const errMap = await $grid.validate(selectRecords)
              if (errMap) {
                ElMessage.warning("数据校验失败")
                ElMessage.warning(t('productStock.dataVerificationFailed'))
                return
              }
            } else {
              ElMessage.warning("未选中数据")
              ElMessage.warning(t('productStock.unselectedData'))
              return
            }
@@ -275,7 +279,7 @@
            request.post("/FinishedGoodsInventory/updateFinishedGoodsInventoryAllocate", flowData.value).then((res) => {
              if (res.code == 200) {
                ElMessage.success("调拨成功")
                ElMessage.success(t('productStock.transferSuccessful'))
                router.push({path:'/main/productStock/OrderAllocation',query:{random:Math.random()}})
              } else {
                ElMessage.warning(res.msg)
@@ -337,21 +341,21 @@
/*数据校验*/
const validRules = ref({
  orderId: [
    { required: true, message: '请输入调拨的订单号' }
    { required: true, message: t('productStock.pleaseEnterTheOrderIdForTheTransfer') }
  ],
  orderNumber: [
    { required: true, message: '请输入调拨的订单序号' }
    { required: true, message: t('productStock.pleaseEnterTheOrderNumberForTheTransfer') }
  ],
  quantity: [{
    validator (e) {
      if (e.row.quantity > e.row.finishedGoodsInventory.quantityAvailable) {
        return new Error('调拨数量不能大于订单数')
        return new Error(t('productStock.theTransferQuantityCannotBeGreaterThanTheOrderQuantity'))
      }else if (e.row.quantity ==="") {
        return new Error('调拨数量不能为空或者是0')
        return new Error(t('productStock.transferQuantityCannotBeEmptyOr0'))
      }
      const regex = /^[1-9]\d*$/g
      if ( !regex.test(e.row.quantity) ) {
        return new Error('请输入正整数')
        return new Error(t('productStock.pleaseEnterAPositiveInteger'))
      }
    }
@@ -393,7 +397,7 @@
      <!--左边固定显示的插槽-->
      <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>
<!--        <el-button @click="getTableRow(row,'out')" link type="primary" size="small">成品领出</el-button>-->
<!--        <el-button @click="getTableRow(row,'back')" link type="primary" size="small">成品返工</el-button>-->
      </template>
@@ -432,4 +436,11 @@
  width: 99%;
  height: 100%;
}
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
</style>
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/ProductStock.vue
@@ -5,6 +5,10 @@
import deepClone from "@/utils/deepClone";
import {ElMessage} from "element-plus";
import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const router = useRouter()
@@ -19,11 +23,11 @@
  <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/productStock/ProductStockList' }">库存查询</el-breadcrumb-item>
       <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/productStock/CreateProductStock' }">成品入库</el-breadcrumb-item>
       <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/productStock/FinishedProductOut' }">成品出库</el-breadcrumb-item>
       <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/productStock/FinishedProductReturn' }">订单成品退货</el-breadcrumb-item>
       <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">报表</el-breadcrumb-item>
       <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/productStock/ProductStockList' }" >{{$t('productStock.inventoryQuery')}}</el-breadcrumb-item>
       <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/productStock/CreateProductStock' }">{{$t('productStock.finishedProductWarehousing')}}</el-breadcrumb-item>
       <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/productStock/FinishedProductOut' }">{{$t('productStock.finishedProductOutbound')}}</el-breadcrumb-item>
       <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/productStock/FinishedProductReturn' }">{{$t('productStock.finishedProductOrderReturn')}}</el-breadcrumb-item>
       <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">{{$t('productStock.reportForms')}}</el-breadcrumb-item>
<!--       <el-breadcrumb-item :to="{ path: '/main/productStock/OrderAllocation' }">订单调拨</el-breadcrumb-item>-->
<!--       <el-breadcrumb-item :to="{ path: '/main/productStock/FinishedGoodsIssue' }">成品领出</el-breadcrumb-item>-->
<!--       <el-breadcrumb-item :to="{ path: '/main/productStock/FinishedProductRework' }">成品返工</el-breadcrumb-item>-->
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/ProductStockList.vue
@@ -5,6 +5,10 @@
import request from "@/utils/request";
import deepClone from "@/utils/deepClone";
import {ElMessage} from "element-plus";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
let router=useRouter()
let produceList = ref([])
const getTableRow = (row,type) =>{
@@ -181,37 +185,36 @@
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: '60'},
    // { type: 'checkbox',fixed:"left", title: '选择', width: '80' },
    { type: 'seq',fixed:"left", title: '自序', width: '80' },
    { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    // {title: '操作', width: '220', slots: { default: 'button_slot' },fixed:"left"},
    {field: 'orderDetail.orderNumber', width:'150', title: '订单序号', filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
    {field: 'order.orderId', width: '150',title: '销售单号',showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '120',title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.orderType', width: '100',title: '订单类型', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName', width: '100',title: '产品名称', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: '产品编号', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.orderNumber', width:'150', title: t('order.OrderNum'), filters:[{ data: '' }],slots: { filter: 'num1_filter' } },
    {field: 'order.orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.project', width: '120',title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order.orderType', width: '100',title: t('order.orderType'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName', width: '100',title: t('order.product'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: t('order.productId'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: '宽度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: '高度', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'inventory',width: '140', title: '库存数量', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantityAvailable',width: '140', title: '可用数量', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: t('order.height'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'inventory',width: '140', title: t('productStock.inventoryQuantity'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantityAvailable',width: '140', title: t('productStock.availableQuantity'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'actualSignalArea',width: '140', title: '实际单片面积', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'area',width: '100', title: '总面积', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'actualSignalArea',width: '140', title: t('productStock.singlePieceArea'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'area',width: '100', title: t('productStock.totalArea'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    /*{field: 'warehouseNumber',width: '100', title: '仓库编号', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},*/
    {field: 'storageRegion',width: '100', title: '库存区域', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'status',width: '100', title: '状态', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'storageRegion',width: '100', title: t('productStock.inventoryArea'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'status',width: '100', title: t('productStock.status'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'enterStorageTime',width: '140', title: '入库时间', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'updateTime',width: '140', title: '修改时间', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'endTime',width: '100', title: '出库时间', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'remark',width: '80', title: '备注', filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'enterStorageTime',width: '140', title: t('productStock.storageTime'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'updateTime',width: '140', title: t('productStock.modificationTime'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'endTime',width: '100', title: t('productStock.outboundTime'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'remark',width: '80', title: t('productStock.remarks'), filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  ],//表头按钮
  toolbarConfig: {
    buttons: [
      { 'code' :'issue','name':'订单调拨',status: 'primary'},
      { 'code' :'out','name':'成品领出',status: 'primary'},
      { 'code' :'rework','name':'成品返工',status: 'primary'},
      { 'code' :'issue','name':t('productStock.orderTransfer'),status: 'primary'},
      { 'code' :'out','name':t('productStock.finishedProductPickup'),status: 'primary'},
      { 'code' :'rework','name':t('productStock.finishedProductRework'),status: 'primary'},
    ],
    /*import: false,
@@ -226,7 +229,7 @@
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return `合计`
          return t('basicData.total')
        }
        if (footList.includes(column.field)) {
          return sumNum(data, column.field)
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/ReworkRecord.vue
@@ -8,6 +8,10 @@
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import {Search} from "@element-plus/icons-vue";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
const username = userStore.user.userName
@@ -186,27 +190,27 @@
  },//表头参数
  columns:[
    {type: 'checkbox',fixed:"left", title: '选择', width: '80' },
    {type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' },
    {type:'expand',fixed:"left",slots: { content:'content' },width: '80'},
    {type: 'seq',fixed:"left", title: '自序', width: '80' },
    {field: 'status', width: '120',title: '单据状态',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationOrderNumber', width:'150', title: '操作单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId', width: '150',title: '销售单号',showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationNumber', width: '100',title: '序号', showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity', width: '140',title: '领出/返工数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: '产品编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '140', title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: '宽度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: '高度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operator', width: '100',title: '制单人',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateTime', width:'140', title: '制单日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewed', width: '100',title: '审核人',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewedTime', width: '140',title: '审核日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'remarks', width: '140',title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    {field: 'status', width: '120',title: t('productStock.documentStatus'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationOrderNumber', width:'150', title: t('productStock.operationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationNumber', width: '100',title: t('order.OrderNum'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity', width: '140',title: t('productStock.receivedReworkedQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '140', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operator', width: '100',title: t('productStock.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateTime', width:'140', title: t('productStock.productionDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewed', width: '100',title: t('productStock.reviewed'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewedTime', width: '140',title: t('productStock.approvedDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'remarks', width: '140',title: t('productStock.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  ],//表头按钮
  toolbarConfig: {
    buttons: [{
      'name': '反审',status: 'primary',
      'name': t('basicData.cancelReview'),status: 'primary',
      'code':'add'
    }],
    /*import: false,
@@ -220,7 +224,7 @@
    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)
@@ -252,7 +256,7 @@
            })
            request.post("/FinishedGoodsInventory/updateFinishedGoodsInventoryCounterExamination",flowData.value).then((res) => {
              if(res.code==200){
                ElMessage.success("反审成功")
                ElMessage.success(t('productStock.reverseReviewSuccessful'))
                router.push({path:'/main/productStock/ReworkRecord',query:{random:Math.random()}})
              }else{
@@ -299,7 +303,7 @@
        value-format="YYYY-MM-DD"
    />
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">查询</el-button>
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button>
    <vxe-grid
        max-height="100%"
@@ -333,8 +337,8 @@
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" 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,'edit')" link type="primary" size="small">{{$t('basicData.edit')}}</el-button>
        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/TakeOutRecord.vue
@@ -8,6 +8,10 @@
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import {Search} from "@element-plus/icons-vue";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
const username = userStore.user.userName
@@ -184,36 +188,36 @@
  },//表头参数
  columns:[
    {type: 'checkbox',fixed:"left", title: '选择', width: '80' },
    //{field:"status", title: '选择', width: '80',slots: { default: 'state' } },
    {type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' },
    {type:'expand',fixed:"left",slots: { content:'content' },width: '80'},
    {type: 'seq',fixed:"left", title: '自序', width: '80' },
    {field: 'status', width: '120',title: '单据状态',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationOrderNumber', width:'150', title: '操作单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId', width: '150',title: '销售单号',showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationNumber', width: '100',title: '序号', showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity', width: '140',title: '领出/返工数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: '产品编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '140', title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: '宽度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: '高度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operator', width: '100',title: '制单人',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateTime', width:'140', title: '制单日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewed', width: '100',title: '审核人',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewedTime', width: '140',title: '审核日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'remarks', width: '140',title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    {field: 'status', width: '120',title: t('productStock.documentStatus'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationOrderNumber', width:'150', title: t('productStock.operationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationNumber', width: '100',title: t('order.OrderNum'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity', width: '140',title: t('productStock.receivedReworkedQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '140', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operator', width: '100',title: t('productStock.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateTime', width:'140', title: t('productStock.productionDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewed', width: '100',title: t('productStock.reviewed'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewedTime', width: '140',title: t('productStock.approvedDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'remarks', width: '140',title: t('productStock.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  ],//表头按钮
  toolbarConfig: {
    buttons: [{
      'name': '审核',status: 'primary',
      'name': t('basicData.review'),status: 'primary',
      'code':'add'
    },
      {
        'name': '反审',status: 'primary',
        'name': t('basicData.cancelReview'),status: 'primary',
        'code':'rework'
      },
      {
        'name': '作废',status: 'primary',
        'name': t('productStock.returnToWarehouse'),status: 'primary',
        'code':'cancel'
      }],
    /*import: false,
@@ -227,7 +231,7 @@
    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)
@@ -259,7 +263,7 @@
            })
            request.post("/FinishedGoodsInventory/updateFinishedGoodsInventoryToExamine",flowData.value).then((res) => {
              if(res.code==200){
                ElMessage.success("审核成功")
                ElMessage.success(t('productStock.reviewSuccessful'))
                router.push({path:'/main/productStock/TakeOutRecord',query:{random:Math.random()}})
              }else{
@@ -291,7 +295,7 @@
            console.log(flowData)
            request.post("/FinishedGoodsInventory/cancelFinishedGoodsInventoryToExamine",flowData.value).then((res) => {
              if(res.code==200){
                ElMessage.success("作废成功")
                ElMessage.success(t('productStock.invalidSuccessfully'))
                router.push({path:'/main/productStock/TakeOutRecord',query:{random:Math.random()}})
              }else{
@@ -338,7 +342,7 @@
        value-format="YYYY-MM-DD"
    />
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">查询</el-button>
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button>
    <vxe-grid
        max-height="100%"
@@ -372,8 +376,8 @@
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" 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,'edit')" link type="primary" size="small">{{$t('basicData.edit')}}</el-button>
        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
north-glass-erp/northglass-erp/src/views/mm/mainProductStock/TransferRecord.vue
@@ -8,6 +8,10 @@
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import {Search} from "@element-plus/icons-vue";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
const username = userStore.user.userName
@@ -192,21 +196,21 @@
    //{type: 'checkbox',fixed:"left", title: '选择', width: '80' },
    {type:'expand',fixed:"left",slots: { content:'content' },width: '80'},
    {type: 'seq',fixed:"left", title: '自序', width: '80' },
    {field: 'operationOrderNumber', width:'150', title: '操作单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId', width: '150',title: '销售单号',showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationNumber', width: '100',title: '序号', showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'staterOperationOrderNumber', width: '150',title: '新调拨单号',showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'endOperationOrderNumber', width: '100',title: '新序号', showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity', width: '140',title: '调拨数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: '产品编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '140', title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: '宽度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: '高度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operator', width: '100',title: '制单人',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateTime', width:'140', title: '制单日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
    {field: 'operationOrderNumber', width:'150', title: t('productStock.operationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId', width: '150',title: t('order.orderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operationNumber', width: '100',title: t('order.OrderNum'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'staterOperationOrderNumber', width: '150',title: t('productStock.newOrderId'),showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'endOperationOrderNumber', width: '100',title: t('productStock.newOrderNumber'), showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity', width: '140',title: t('productStock.transferQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productId',width: '100', title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.productName',width: '140', title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.width', width: '100',title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderDetail.height',width: '100', title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operator', width: '100',title: t('productStock.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateTime', width:'140', title: t('productStock.productionDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'remarks', width: '140',title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'remarks', width: '140',title: t('productStock.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
  ],//表头按钮
@@ -214,7 +218,7 @@
    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)
@@ -246,7 +250,7 @@
            })
            request.post("/FinishedGoodsInventory/updateFinishedGoodsInventoryCounterExamination",flowData.value).then((res) => {
              if(res.code==200){
                ElMessage.success("反审成功")
                ElMessage.success(t('productStock.reverseReviewSuccessful'))
                router.push({path:'/main/productStock/TransferRecord',query:{random:Math.random()}})
              }else{
@@ -283,7 +287,7 @@
        value-format="YYYY-MM-DD"
    />
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">查询</el-button>
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button>
    <vxe-grid
        max-height="100%"
@@ -316,8 +320,8 @@
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" 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,'edit')" link type="primary" size="small">{{$t('basicData.edit')}}</el-button>
        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
north-glass-erp/northglass-erp/src/views/pp/Replenish/AddReplenish.vue
@@ -7,6 +7,10 @@
import deepClone from "@/utils/deepClone";
import {changeFilterEvent,filterChanged} from "@/hook"
import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
let router = useRouter()
@@ -81,33 +85,33 @@
  },//表头参数
  columns:[
    {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
    {field: 'select',type:'checkbox',title: '选择', width: 80,fixed:"left"},
    {type: 'seq', fixed: "left", title: '自序', width: 50},
    {field: 'reportingWorkTime', width: 120, title: '报工时间', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'orderId', width: 120, title: '销售单号', showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'processId', width: 120, title: '流程卡号', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'project', width: 120, title: '项目名称', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'batch', width: 80, title: '批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, showOverflow: "ellipsis",filterMethod:filterChanged},
    {field: 'orderSort', width: 80, title: '序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'productName', width: 120, title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'reportingWorkId', width: 120, title: '报工编号', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'technologyNumber', width: 80, title: '标记',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, showOverflow: "ellipsis",filterMethod:filterChanged},
    {field: 'glassAddress', width: 90, title: '片标记', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'patchNum', width: 120, title: '次破数量', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'width', width: 80, title: '宽', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'height', width: 80, title: '高', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'shape', width: 80, title: '形状', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'patchProcesses', width: 100, title: '报工工序', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'patchType', width: 100, title: '次破类型', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'patchReason', width: 120, title: '次破原因', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'responsibleEquipment', width: 120, title: '责任设备', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'responsibleTeam', width: 120, title: '责任班组', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'qualityInspector', width: 100, title: '质检员', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}
    {field: 'select',type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"},
    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
    {field: 'reportingWorkTime', width: 120, title: t('reportingWorks.reportingWorkTime'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'orderId', width: 120, title: t('order.orderId'), showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'processId', width: 120, title: t('processCard.processId'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'project', width: 120, title: t('order.project'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'batch', width: 80, title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, showOverflow: "ellipsis",filterMethod:filterChanged},
    {field: 'orderSort', width: 80, title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'productName', width: 120, title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'reportingWorkId', width: 120, title: t('reportingWorks.reportingWorkId'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'technologyNumber', width: 80, title: t('replenish.mark'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, showOverflow: "ellipsis",filterMethod:filterChanged},
    {field: 'glassAddress', width: 90, title: t('replenish.mark'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'patchNum', width: 120, title: t('replenish.sliceMarking'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'width', width: 80, title: t('order.width'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'height', width: 80, title: t('order.height'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'shape', width: 80, title: t('order.shape'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'patchProcesses', width: 100, title: t('reportingWorks.reportingProcess'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'patchType', width: 100, title: t('reportingWorks.breakageType'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'patchReason', width: 120, title: t('reportingWorks.breakageReason'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'responsibleEquipment', width: 120, title: t('reportingWorks.responsibleEquipment'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'responsibleTeam', width: 120, title: t('reportingWorks.responsibleTeam'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'qualityInspector', width: 100, title: t('reportingWorks.qualityInspector'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}
  ],//表头按钮
  toolbarConfig: {
    buttons: [
      {'code': 'add', 'name': '保存',status: 'primary',icon: 'vxe-icon-save'}
      {'code': 'add', 'name': t('basicData.save'),status: 'primary',icon: 'vxe-icon-save'}
    ],
    import: false,
    export: true,
@@ -121,7 +125,7 @@
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计'
          return t('basicData.total')
        }
        if (footList.includes(column.field)) {
          return sumNum(data, column.field)
@@ -147,7 +151,7 @@
              return
            }
          } else {
            ElMessage.warning("未选中数据")
            ElMessage.warning(t('productStock.unselectedData'))
            return
          }
@@ -158,7 +162,7 @@
          })
          request.post("/Replenish/saveReplenish", flowData.value).then((res) => {
            if(res.code==200){
              ElMessage.success("补片单提交成功")
              ElMessage.success(t('basicData.msg.saveSuccess'))
              router.push({path:'/main/Replenish/AddReplenish',query:{random:Math.random()}})
            }else{
              ElMessage.warning(res.msg)
@@ -260,7 +264,7 @@
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>
        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
@@ -281,4 +285,11 @@
  width: 99%;
  height: 100%;
}
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
</style>
north-glass-erp/northglass-erp/src/views/pp/Replenish/Replenish.vue
@@ -6,6 +6,10 @@
import {ElMessage} from "element-plus";
import  GlassType from '@/components/basic/product/GlassType.vue'
import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const router = useRouter()
@@ -20,9 +24,9 @@
  <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/Replenish/SelectReplenish' }">补片管理</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/Replenish/AddReplenish' }">补片新增</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/Replenish/PrintReplenishFlowCard' }">补片打印</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/Replenish/SelectReplenish' }">{{$t('replenish.patchManagement')}}</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/Replenish/AddReplenish' }">{{$t('replenish.addPatches')}}</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/Replenish/PrintReplenishFlowCard' }">{{$t('replenish.printPatches')}}</el-breadcrumb-item>
        <el-breadcrumb-item :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">打印</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
north-glass-erp/northglass-erp/src/views/pp/Replenish/SelectReplenish.vue
@@ -8,6 +8,10 @@
import {Search} from "@element-plus/icons-vue";
import useUserInfoStore from "@/stores/userInfo";
import {changeFilterEvent,filterChanged} from "@/hook"
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
@@ -111,39 +115,39 @@
  columns:[
    {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
    {type:'checkbox',title: '选择', width: 80,fixed:"left"},
    {type: 'seq', fixed: "left", title: '自序', width: 50},
    {field: 'review_status',title: '审核', width: 40, slots: { default: 'state' }},
    {field: 'patch_id', width: 120, title: '补片单号', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'order_id', width: 120, title: '销售单号', showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'process_id', width: 120, title: '流程卡号', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'project', width: 120, title: '项目名称', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'reporting_work_id', width: 100,title: '报工编号',filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'batch', width: 80, title: '批次', showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'order_sort', width: 80, title: '序号', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'product_name', width: 120, title: '单片名称', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'building_number',width: 120, title: '楼层编号', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'technology_number', width: 80, title: '标记', showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'glass_address', width: 90, title: '片标记', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'patch_num', width: 80, title: '数量', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'width', width: 80, title: '宽', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'height', width: 80, title: '高', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'shape', width: 80, title: '形状', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'patch_type', width: 100, title: '返工类型', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'patch_reason', width: 120, title: '返工原因', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'responsible_equipment', width: 120, title: '责任设备', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'responsible_team', width: 120, title: '责任班组', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'patch_area', width: 120, title: '面积', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'patch_processes', width: 120, title: '报工工序', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'quality_inspector', width: 100, title: '质检员', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'reviewer', width: 100, title: '审核员', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'create_time', width: 100, title: '补片时间'},
    {field: 'update_time', width: 120, title: '补片审核时间'}
    {type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"},
    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
    {field: 'review_status',title: t('basicData.review'), width: 40, slots: { default: 'state' }},
    {field: 'patch_id', width: 120, title: t('replenish.patchNumber'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'order_id', width: 120, title: t('order.orderId'), showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'process_id', width: 120, title: t('processCard.processId'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'project', width: 120, title: t('order.project'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'reporting_work_id', width: 100,title: t('reportingWorks.reportingWorkId'),filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'batch', width: 80, title: t('order.batch'), showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'order_sort', width: 80, title:t('order.OrderNum'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'product_name', width: 120, title: t('order.product'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    //{field: 'building_number',width: 120, title: '楼层编号', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'technology_number', width: 80, title: t('replenish.mark'), showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'glass_address', width: 90, title: t('replenish.sliceMarking'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'patch_num', width: 80, title: t('order.quantity'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'width', width: 80, title: t('order.width'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'height', width: 80, title: t('order.height'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'shape', width: 80, title: t('order.shape'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'patch_type', width: 100, title: t('reportingWorks.breakageType'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'patch_reason', width: 120, title: t('reportingWorks.breakageReason'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'responsible_equipment', width: 120, title: t('reportingWorks.responsibleEquipment'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'responsible_team', width: 120, title: t('reportingWorks.responsibleTeam'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'patch_area', width: 120, title: t('order.area'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'patch_processes', width: 120, title:  t('reportingWorks.reportingProcess'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'quality_inspector', width: 100, title: t('reportingWorks.qualityInspector'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'reviewer', width: 100, title: t('productStock.reviewed'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'create_time', width: 100, title: t('productStock.productionDate')},
    {field: 'update_time', width: 120, title: t('productStock.approvedDate')}
  ],//表头按钮
  toolbarConfig: {
    buttons: [{
      'name': '审核',status: 'primary',
      'name': t('basicData.review'),status: 'primary',
      'code':'add'
    }],
    /*import: false,
@@ -158,7 +162,7 @@
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计'
          return t('basicData.total')
        }
        if (footList.includes(column.field)) {
          return sumNum(data, column.field)
@@ -180,7 +184,7 @@
          if ($table) {
            const selectRecords = $table.getCheckboxRecords()
            if (selectRecords.length === 0) {
              ElMessage.warning("未选中数据")
              ElMessage.warning(t('productStock.unselectedData'))
              return
            }
            let flowData = ref({
@@ -192,7 +196,7 @@
            })
            request.post("/Replenish/updateReplenish",flowData.value).then((res) => {
              if(res.code==200){
                ElMessage.success("审核成功")
                ElMessage.success(t('basicData.msg.ReviewSuccess'))
                router.push({path:'/main/Replenish/SelectReplenish',query:{random:Math.random()}})
              }else{
@@ -268,7 +272,7 @@
          value-format="YYYY-MM-DD"
      />
      <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">查询</el-button>
      <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button>
    </el-header>
    <vxe-grid
@@ -293,7 +297,7 @@
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>
        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
north-glass-erp/northglass-erp/src/views/pp/rework/AddRework.vue
@@ -7,6 +7,10 @@
import deepClone from "@/utils/deepClone";
import {changeFilterEvent,filterChanged} from "@/hook"
import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
let router = useRouter()
@@ -77,7 +81,7 @@
    body: {
      options: [
        [
          { code: 'copyChecked', name: '选中相同', prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
          { code: 'copyChecked', name: t('basicData.selectSame'), prefixIcon: 'vxe-icon-copy', visible: true, disabled: false },
        ]
      ]
    }
@@ -99,34 +103,34 @@
  },//表头参数
  columns: [
    {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
    {field: 'select',type:'checkbox',title: '选择', width: 80,fixed:"left"},
    {type: 'seq', fixed: "left", title: '自序', width: 50},
    {field: 'reworkTeam', width: 120, title: '返工班组', slots: {default: 'responsibleTeam_default', edit: 'responsibleTeam'}, editRender: {}},
    {field: 'orderId', width: 120, title: '销售单号', sortable: true, showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'processId', width: 120, title: '流程卡号', sortable: true, filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'project', width: 120, title: '项目名称', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'batch', width: 80, title: '批次', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }, showOverflow: "ellipsis",filterMethod:filterChanged},
    {field: 'orderSort', width: 80, title: '序号', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'productName', width: 120, title: '单片名称', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'technologyNumber', width: 80, title: '标记', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }, showOverflow: "ellipsis",filterMethod:filterChanged},
    {field: 'glassAddress', width: 90, title: '片标记', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'breakageQuantity', width: 120, title: '次破数量', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'reworkNum',width:120,  title: '返工数量',editRender: { name: 'input', attrs: { placeholder: '' } },filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'width', width: 80, title: '宽', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'height', width: 80, title: '高', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'shape', width: 80, title: '形状', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'reworkProcesses', width: 100, title: '返工工序', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'reworkType', width: 100, title: '返工类型', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'reworkReason', width: 120, title: '返工原因', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'responsibleEquipment', width: 120, title: '责任设备', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'responsibleTeam', width: 120, title: '责任班组', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'area', width: 120, title: '返工面积', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'qualityInspector', width: 100, title: '质检员', sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}
    {field: 'select',type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"},
    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
    {field: 'reworkTeam', width: 120, title: t('rework.reworkTeam'), slots: {default: 'responsibleTeam_default', edit: 'responsibleTeam'}, editRender: {}},
    {field: 'orderId', width: 120, title: t('order.orderId'), sortable: true, showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'processId', width: 120, title: t('processCard.processId'), sortable: true, filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'project', width: 120, title: t('order.project'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'batch', width: 80, title: t('order.batch'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }, showOverflow: "ellipsis",filterMethod:filterChanged},
    {field: 'orderSort', width: 80, title: t('order.OrderNum'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'productName', width: 120, title: t('order.product'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'technologyNumber', width: 80, title: t('replenish.mark'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }, showOverflow: "ellipsis",filterMethod:filterChanged},
    {field: 'glassAddress', width: 90, title: t('replenish.sliceMarking'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'breakageQuantity', width: 120, title: t('reportingWorks.quantityBroken'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'reworkNum',width:120,  title: t('productStock.reworkQuantity'),editRender: { name: 'input', attrs: { placeholder: '' } },filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'width', width: 80, title: t('order.width'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'height', width: 80, title: t('order.height'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'shape', width: 80, title: t('order.shape'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'reworkProcesses', width: 100, title: t('rework.reworkProcess'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'reworkType', width: 100, title: t('rework.reworkType'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'reworkReason', width: 120, title: t('rework.reasonForRework'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'responsibleEquipment', width: 120, title: t('reportingWorks.responsibleEquipment'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'responsibleTeam', width: 120, title: t('reportingWorks.responsibleTeam'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'area', width: 120, title: t('rework.reworkArea'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'qualityInspector', width: 100, title: t('reportingWorks.qualityInspector'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}
  ],//表头按钮
  toolbarConfig: {
    buttons: [
      {'code': 'add', 'name': '保存',status: 'primary',icon: 'vxe-icon-save'}
      {'code': 'add', 'name': t('basicData.save'),status: 'primary',icon: 'vxe-icon-save'}
    ],
    import: false,
    export: true,
@@ -140,7 +144,7 @@
    return [
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计:'
          return t('basicData.total')
        }
        if (footList.includes(column.field)) {
          return sumNum(data, column.field)
@@ -166,7 +170,7 @@
              return
            }
          } else {
            ElMessage.warning("未选中数据")
            ElMessage.warning(t('productStock.unselectedData'))
            return
          }
@@ -177,7 +181,7 @@
          })
          request.post("/rework/saveRework", flowData.value).then((res) => {
            if(res.code==200){
              ElMessage.success("返工单提交成功")
              ElMessage.success(t('basicData.msg.saveSuccess'))
              router.push({path:'/main/rework/AddRework',query:{random:Math.random()}})
            }else{
              ElMessage.warning(res.msg)
@@ -254,19 +258,19 @@
/*数据校验*/
const validRules = ref({
  reworkTeam: [
    { required: true, message: '请选择返工班组' }
    { required: true, message: t('rework.PleaseSelectAReworkTeam') }
  ],
  reworkNum: [{
    validator (e) {
      if (e.row.reworkNum > e.row.breakageQuantity) {
        return new Error('返工数量不能大于次破数量')
        return new Error(t('rework.TheReworkQuantityCannotBeGreaterThanTheSecondBreakQuantity'))
      }else if (e.row.reworkNum ==="") {
        return new Error('返工数量不能为空或者是0')
        return new Error(t('rework.reworkQuantityCannotBeEmptyOr0'))
      }
      const regex = /^[1-9]\d*$/g
      if ( !regex.test(e.row.reworkNum) ) {
        return new Error('请输入正整数')
        return new Error(t('productStock.pleaseEnterAPositiveInteger'))
      }
    }
@@ -351,4 +355,11 @@
  width: 99%;
  height: 100%;
}
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
</style>
north-glass-erp/northglass-erp/src/views/pp/rework/Rework.vue
@@ -5,6 +5,10 @@
import deepClone from "@/utils/deepClone";
import {ElMessage} from "element-plus";
import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const router = useRouter()
@@ -19,9 +23,9 @@
  <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/rework/SelectRework' }">返工管理</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/rework/AddRework' }">返工新增</el-breadcrumb-item>
        <el-breadcrumb-item :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">打印</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/rework/SelectRework' }">{{$t('rework.reworkManagement')}}</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/rework/AddRework' }">{{$t('rework.addRework')}}</el-breadcrumb-item>
        <el-breadcrumb-item :to="{ path: '/main/processCard/SelectPrintFlowCard' }" style="display: none">{{$t('rework.printRework')}}</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
north-glass-erp/northglass-erp/src/views/pp/rework/SelectRework.vue
@@ -8,6 +8,10 @@
import {Search} from "@element-plus/icons-vue";
import useUserInfoStore from "@/stores/userInfo";
import {changeFilterEvent,filterChanged} from "@/hook"
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
const username = userStore.user.userName
@@ -121,38 +125,38 @@
  },//表头参数
  columns: [
    {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
    {type:'checkbox',title: '选择', width: 80,fixed:"left"},
    {type: 'seq', fixed: "left", title: '自序', width: 50},
    {field: 'review_status',title: '审核', width: 40, slots: { default: 'state' }},
    {field: 'rework_id', width: 120, title: '返工单号', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_team', width: 120, title: '返工班组', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'order_id', width: 120, title: '销售单号', showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'process_id', width: 120, title: '流程卡号', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'project', width: 120, title: '项目名称', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'batch', width: 80, title: '批次', showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'order_sort', width: 80, title: '序号', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'product_name', width: 120, title: '单片名称', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'technology_number', width: 80, title: '标记', showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'glass_address', width: 90, title: '片标记', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_num', width: 80, title: '数量', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'width', width: 80, title: '宽', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'height', width: 80, title: '高', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'shape', width: 80, title: '形状', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_type', width: 100, title: '返工类型', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_reason', width: 120, title: '返工原因', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'responsible_equipment', width: 120, title: '责任设备', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'responsible_team', width: 120, title: '责任班组', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_area', width: 120, title: '返工面积', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_processes', width: 120, title: '返工工序', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'quality_inspector', width: 100, title: '质检员', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'reviewer', width: 100, title: '审核员', filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'create_time', width: 100, title: '返工时间'},
    {field: 'update_time', width: 120, title: '返工审核时间'}
    {type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"},
    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
    {field: 'review_status',title: t('basicData.review'), width: 40, slots: { default: 'state' }},
    {field: 'rework_id', width: 120, title: t('rework.reworkNumber'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_team', width: 120, title: t('rework.reworkTeam'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'order_id', width: 120, title: t('order.orderId'), showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'process_id', width: 120, title: t('processCard.processId'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'project', width: 120, title: t('order.project'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'batch', width: 80, title: t('order.batch'), showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'order_sort', width: 80, title: t('order.OrderNum'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'product_name', width: 120, title: t('order.product'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'technology_number', width: 80, title: t('replenish.mark'), showOverflow: "ellipsis", filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'glass_address', width: 90, title: t('replenish.sliceMarking'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_num', width: 80, title: t('productStock.reworkQuantity'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'width', width: 80, title: t('order.width'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'height', width: 80, title: t('order.height'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'shape', width: 80, title: t('order.shape'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_type', width: 100, title: t('rework.reworkType'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_reason', width: 120, title: t('rework.reasonForRework'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'responsible_equipment', width: 120, title: t('reportingWorks.responsibleEquipment'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'responsible_team', width: 120, title: t('reportingWorks.responsibleTeam'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_area', width: 120, title: t('rework.reworkArea'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'rework_processes', width: 120, title: t('rework.reworkProcess'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'quality_inspector', width: 100, title: t('reportingWorks.qualityInspector'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'reviewer', width: 100, title: t('productStock.reviewed'), filters: [{data: ''}], slots: {filter: 'num1_filter'},filterMethod:filterChanged},
    {field: 'create_time', width: 100, title: t('productStock.productionDate')},
    {field: 'update_time', width: 120, title: t('productStock.approvedDate')}
  ],//表头按钮
  toolbarConfig: {
    buttons: [{
      'name': '审核',status: 'primary',
      'name': t('basicData.review'),status: 'primary',
      'code':'add'
    }],
    /*import: false,
@@ -167,7 +171,7 @@
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return `合计`
          return t('basicData.total')
        }
        if (footList.includes(column.field)) {
          return sumNum(data, column.field)
@@ -190,7 +194,7 @@
          if ($table) {
            const selectRecords = $table.getCheckboxRecords()
            if (selectRecords.length === 0) {
              ElMessage.warning("未选中数据")
              ElMessage.warning(t('productStock.unselectedData'))
              return
            }
            let flowData = ref({
@@ -202,7 +206,7 @@
            })
            request.post("/rework/updateRework",flowData.value).then((res) => {
              if(res.code==200){
                ElMessage.success("审核成功")
                ElMessage.success(t('basicData.msg.ReviewSuccess'))
                router.push({path:'/main/rework/SelectRework',query:{random:Math.random()}})
              }else{
@@ -278,7 +282,7 @@
          value-format="YYYY-MM-DD"
      />
      <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">查询</el-button>
      <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button>
    </el-header>
@@ -303,11 +307,6 @@
        </ul>
      </template>
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="dialogFormVisible = true" link type="primary" size="small">编辑</el-button>
        <el-button @click="getTableRow(row,'setType')" link type="primary" size="small">审核</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
        <div>
@@ -338,30 +337,7 @@
    </vxe-grid>
<!--  返工管理-“编辑”弹窗  -->
    <el-dialog v-model="dialogFormVisible" title="返工编辑">
      <el-form :model="editData">
        <el-form-item label="返工编号" :label-width="formLabelWidth">
          <el-input v-model="form.name" disabled autocomplete="off" style="width: 200px"/>
        </el-form-item>
        <el-form-item label="返工班组" :label-width="formLabelWidth">
          <el-select v-model="form.region" placeholder="班组一" style="width: 200px">
            <el-option label="班组一" value="shanghai"/>
            <el-option label="班组二" value="beijing"/>
          </el-select>
        </el-form-item>
      </el-form>
      <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取消</el-button>
        <el-button type="primary" @click="dialogFormVisible = false">
          确认
        </el-button>
      </span>
      </template>
    </el-dialog>
  </div>
</template>
north-glass-erp/northglass-erp/src/views/sd/customer/CreateCustomer.vue
@@ -4,6 +4,10 @@
import request from "@/utils/request"
import {ElMessage} from "element-plus";
import deepClone from "@/utils/deepClone"
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
let produceList = ref([])
@@ -51,32 +55,32 @@
  //表头数据校验
  const customerName = ruleForm.value.customerName
  if(customerName === null || customerName === undefined || customerName === ''){
    ElMessage.error('输入客户名称!')
    ElMessage.error(t('customer.pleaseEnterTheCustomerName'))
    return
  }
  const grade = ruleForm.value.grade
  if(grade === null || grade === undefined || grade === ''){
    ElMessage.error('输入客户等级!')
    ElMessage.error(t('customer.pleaseEnterCustomerLevel'))
    return
  }
  const moneyLimit = ruleForm.value.moneyLimit
  if(moneyLimit === null || moneyLimit === undefined || moneyLimit === ''){
    ElMessage.error('输入金额额度!')
    ElMessage.error(t('customer.pleaseEnterTheAmountOfFunds'))
    return
  }
  const address = ruleForm.value.address
  if(address === null || address === undefined || address === ''){
    ElMessage.error('输入联系地址!')
    ElMessage.error(t('customer.pleaseEnterTheContactAddress'))
    return
  }
  const contact = ruleForm.value.contact
  if(contact === null || contact === undefined || contact === ''){
    ElMessage.error('输入联系人!')
    ElMessage.error(t('customer.pleaseEnterTheContactPerson'))
    return
  }
  const phone = ruleForm.value.phone
  if(phone === null || phone === undefined || phone === ''){
    ElMessage.error('输入类型电话!')
    ElMessage.error(t('customer.pleaseEnterTheContactPhoneNumber'))
    return
  }
@@ -87,7 +91,7 @@
  request.post("/customer/insertCustomer", flowData.value).then((res) => {
    if(res.code==200){
      resetForm()
      ElMessage.success("提交成功")
      ElMessage.success(t('basicData.msg.saveSuccess'))
    }else{
      ElMessage.warning(res.msg)
      router.push("/login")
@@ -111,32 +115,32 @@
    <div class="order-primary" >
      <el-row>
        <el-col  :span="2"><el-text>客户名称:</el-text></el-col>
        <el-col  :span="2"><el-text>{{ $t('customer.customerName') }}:</el-text></el-col>
        <el-col  :span="5"><el-input style="font-size: large;color: #181818" v-model="ruleForm.customerName"  ></el-input></el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>客户等级:</el-text></el-col>
        <el-col  :span="2"><el-text>{{ $t('customer.customerGrade') }}:</el-text></el-col>
        <el-col  :span="5"><el-input style="font-size: large;color: #181818" v-model="ruleForm.grade"  ></el-input></el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>信用额度:</el-text></el-col>
        <el-col  :span="2"><el-text>{{ $t('customer.creditLimit') }}:</el-text></el-col>
        <el-col  :span="5"><el-input style="font-size: large;color: #181818" v-model="ruleForm.moneyLimit"  ></el-input></el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>地址:</el-text></el-col>
        <el-col  :span="2"><el-text>{{ $t('customer.address') }}:</el-text></el-col>
        <el-col  :span="5"><el-input style="font-size: large;color: #181818" v-model="ruleForm.address"  ></el-input></el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>联系人:</el-text></el-col>
        <el-col  :span="2"><el-text>{{ $t('customer.contacts') }}:</el-text></el-col>
        <el-col  :span="5"><el-input style="font-size: large;color: #181818" v-model="ruleForm.contact"  ></el-input></el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>联系电话:</el-text></el-col>
        <el-col  :span="2"><el-text>{{ $t('customer.telephone') }}:</el-text></el-col>
        <el-col  :span="5"><el-input style="font-size: large;color: #181818" v-model="ruleForm.phone"  ></el-input></el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-button type="primary" @click="submitForm()">保存</el-button></el-col>
        <el-col  :span="2"><el-button @click="resetForm()">重置</el-button></el-col>
        <el-col  :span="2"><el-button type="primary" @click="submitForm()">{{ $t('basicData.save') }}</el-button></el-col>
        <el-col  :span="2"><el-button @click="resetForm()">{{ $t('customer.resetting') }}</el-button></el-col>
      </el-row>
    </div>
north-glass-erp/northglass-erp/src/views/sd/customer/Customer.vue
@@ -1,6 +1,10 @@
<script setup>
import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue"
import {useRouter} from "vue-router";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
let indexFlag=$ref(1)
function changeRouter(index){
  indexFlag=index
@@ -12,9 +16,9 @@
  <div id="main-div">
    <div id="div-title">
      <el-breadcrumb :separator-icon="ArrowRight">
        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/customer/selectCustomer' }">客户首页</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/customer/CreateCustomer' }">新增</el-breadcrumb-item>
        <el-breadcrumb-item v-show="false" :to="{ path: '/main/product/test1' }">测试</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/customer/selectCustomer' }">{{ $t('customer.customerHomePage') }}</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/customer/CreateCustomer' }">{{ $t('customer.increaseCustomers') }}</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
north-glass-erp/northglass-erp/src/views/sd/customer/SelectCustomer.vue
@@ -7,6 +7,10 @@
import VXETable from "vxe-table";
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const userStore = useUserInfoStore()
const username = userStore.user.userName
@@ -184,15 +188,15 @@
  },//表头参数
  columns:[
          {type:'expand',fixed:"left",slots: { content:'content' },width: 60},
          {type: 'seq',fixed:"left", title: '自序', width: 80 },
          {title: '操作', width: 110, slots: { default: 'button_slot' },fixed:"left"},
          {field: 'id', title: '客户编码',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'customerName', title: '名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'grade', title: '客户等级',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'moneyLimit', title: '信用额度',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'address', title: '地址',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'contact', title: '联系人',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'phone', title: '联系电话',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
          {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 },
          {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left"},
          {field: 'id', title: t('customer.customerNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'customerName', title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'grade', title: t('customer.customerGrade'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'moneyLimit', title: t('customer.moneyLimit'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'address', title: t('customer.address'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'contact', title: t('customer.contacts'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
          {field: 'phone', title: t('customer.telephone'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
      ],//表头按钮
  toolbarConfig: {
    buttons: [],
@@ -206,7 +210,7 @@
    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)
@@ -245,8 +249,8 @@
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" 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,'edit')" link type="primary" size="small">{{$t('basicData.edit')}}</el-button>
        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
north-glass-erp/northglass-erp/src/views/sd/delivery/CreateDelivery.vue
@@ -9,6 +9,10 @@
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
const userStore = useUserInfoStore()
@@ -327,39 +331,39 @@
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: 60},
    {field: 'select',type:'checkbox',title: '选择', width: 80,fixed:"left"},
    {type: 'seq', title: '自序', width: 80 ,fixed:"left"},
    {field: 'orderId',width:120,  title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'order.batch',width:120,  title: '批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: '库存可发',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'order.quantity',width:120,  title: '未发数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'quantity',width:120,  title: '总数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.quantity',width:120,  title: '发货数量',editRender: { name: 'input', attrs: { placeholder: '' } },filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'buildingNumber',width:120,  title: '楼号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productId',width:120,   title: '产品编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productName',width:120,  title: '产品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'price',width:120,  title: '单价',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.storageRegion',width:120,  title: '库区',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.money',width:120,  title: '金额',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'width',width:120,  title: '宽',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'height',width:120,  title: '高',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'shape',width:120,  title: '形状',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.actualSignalArea',width:120,   title: '单片面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'grossArea',width:120,   title: '总面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'computeArea',width:120,  title: '结算单片面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'computeGrossArea',width:120,  title: '结算总面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'processingNote',width:120,  title: '加工要求',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.deliveryDetailRemakes',width:120,  title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'edgingType',width:120,  title: '磨边类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'perimeter',width:120,  title: '周长',filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'select',type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"},
    {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left"},
    {field: 'orderId',width:120,  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'order.batch',width:120,  title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: t('delivery.availableStock'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'order.quantity',width:120,  title: t('delivery.unpaidQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.quantity',width:120,  title: t('delivery.deliveryQuantity'),editRender: { name: 'input', attrs: { placeholder: '' } },filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    //{field: 'buildingNumber',width:120,  title: '楼号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productId',width:120,   title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productName',width:120,  title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'price',width:120,  title: t('order.price'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.storageRegion',width:120,  title: t('productStock.inventoryArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.money',width:120,  title: t('order.grossAmount'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'width',width:120,  title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'height',width:120,  title: t('order.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'shape',width:120,  title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'finishedGoodsInventory.actualSignalArea',width:120,   title: t('productStock.singlePieceArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'grossArea',width:120,   title: t('productStock.totalArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'computeArea',width:120,  title: t('order.computeArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'computeGrossArea',width:120,  title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'processingNote',width:120,  title: t('order.processingNote'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'deliveryDetail.deliveryDetailRemakes',width:120,  title: t('productStock.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'edgingType',width:120,  title: t('order.edgingType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
    {field: 'perimeter',width:120,  title: t('productStock.perimeter'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
  ],//表头按钮
  toolbarConfig: {
    buttons: [
      {'code': 'add', 'name': '保存',status: 'primary',icon: 'vxe-icon-save'},
      {'code': 'toExamine', 'name': '审核',status: 'primary'},
      {'code': 'CounterExamination', 'name': '反审',status: 'primary'}
      {'code': 'add', 'name': t('basicData.save'),status: 'primary',icon: 'vxe-icon-save'},
      {'code': 'toExamine', 'name': t('basicData.review'),status: 'primary'},
      {'code': 'CounterExamination', 'name': t('basicData.cancelReview'),status: 'primary'}
    ],
    /*import: false,
   export: true,
@@ -371,7 +375,7 @@
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return `页数:${pageNum}/${pageTotal.value}`
          return t('basicData.total')
        }
        // if (props.tableProp.footList.includes(column.field)) {
        //   return sumNum(data, column.field)
@@ -392,28 +396,28 @@
          const selectRecords = $grid.getCheckboxRecords()
          if (selectRecords.length === 0) {
            ElMessage.warning("未选中数据")
            ElMessage.warning(t('productStock.unselectedData'))
            return
          }
          const errMap = await $grid.validate(selectRecords)
          if (errMap) {
            ElMessage.warning("数据校验失败")
            ElMessage.warning(t('productStock.dataVerificationFailed'))
            return
          }
          //表头数据校验
          const project = titleUploadData.value.project
          if(project === null || project === undefined || project === ''){
            ElMessage.error('输入项目名称!')
            ElMessage.error(t('delivery.pleaseEnterTheAmountOfFunds'))
            return
          }
          const paymentTerms = titleUploadData.value.paymentTerms
          if(paymentTerms === null || paymentTerms === undefined || paymentTerms === ''){
            ElMessage.error('请选择付款条件!')
            ElMessage.error(t('delivery.pleaseSelectPaymentTerms'))
            return
          }
          const payMethod = titleUploadData.value.payMethod
          if(payMethod === null || payMethod === undefined || payMethod === ''){
            ElMessage.error('请输入收款方式!')
            ElMessage.error(t('delivery.pleaseEnterThePaymentMethod'))
            return
          }
@@ -429,7 +433,7 @@
          console.log(flowData)
           request.post("/Delivery/insertDelivery", flowData.value).then((res) => {
             if(res.code==200){
               ElMessage.success("发货单提交成功")
               ElMessage.success(t('delivery.deliveryNoteSubmittedSuccessfully'))
               router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
             }else{
               ElMessage.warning(res.msg)
@@ -446,7 +450,7 @@
          })
          request.post("/Delivery/updateDeliveryToExamine", flowData.value).then((res) => {
            if (res.code == 200) {
              ElMessage.success("审核成功")
              ElMessage.success(t('basicData.msg.ReviewSuccess'))
              router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
            } else {
              ElMessage.warning(res.msg)
@@ -463,7 +467,7 @@
          })
          request.post("/Delivery/updateDeliveryToExamine", flowData.value).then((res) => {
            if (res.code == 200) {
              ElMessage.success("反审成功")
              ElMessage.success(t('basicData.msg.cancelReviewSuccess'))
              router.push({path: '/main/delivery/selectDelivery', query:{random:Math.random()}})
            } else {
              ElMessage.warning(res.msg)
@@ -514,19 +518,19 @@
/*数据校验*/
const validRules = ref({
  quantity: [
    { type: 'number', min: 0, message: '请输入大于等于0的数值' }
    { type: 'number', min: 0, message: t('delivery.pleaseEnterANumericalValueGreaterThanOrEqualTo0') }
  ],
    "deliveryDetail.quantity": [{
       validator (e) {
          if (e.row.deliveryDetail.quantity > e.row.finishedGoodsInventory.quantityAvailable) {
            return new Error('发货数量不能大于库存数')
            return new Error(t('delivery.theShipmentQuantityCannotBeGreaterThanTheInventoryQuantity'))
          }else if (e.row.deliveryDetail.quantity ==="") {
            return new Error('发货数量不能为空或者是0')
            return new Error(t('delivery.theShipmentQuantityCannotBeEmptyOr0'))
         }
         const regex = /^[1-9]\d*$/g
         if ( !regex.test(e.row.deliveryDetail.quantity) ) {
           return new Error('请输入正整数')
           return new Error(t('productStock.pleaseEnterAPositiveInteger'))
         }
       }
@@ -542,15 +546,15 @@
  <div class="main-div">
    <div class="order-primary" style="background-color: white">
      <el-row>
        <el-col  :span="2"><el-text>客户编码:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.customerNumber')}}:</el-text></el-col>
        <el-col  :span="3"><el-input style="font-size: large;color: #181818" v-model="titleUploadData.customerId" :readonly="true" ></el-input></el-col>
        <el-col  :span="2"><el-text>客户名称:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.customerName')}}:</el-text></el-col>
        <el-col  :span="5"><el-input  v-model="titleUploadData.customerName" :readonly="true"></el-input></el-col>
        <el-col  :span="2"><el-text>项目名称:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.customerNumber')}}:</el-text></el-col>
        <el-col  :span="5"><el-input v-model="titleUploadData.project" :readonly="true"></el-input></el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>付款条件:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.project')}}:</el-text></el-col>
        <el-col  :span="3">
          <el-select v-model="titleUploadData.paymentTerms"  clearable placeholder=""  >
            <el-option
@@ -561,20 +565,20 @@
            />
          </el-select>
        </el-col>
        <el-col  :span="2"><el-text>联系人:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.contacts')}}:</el-text></el-col>
        <el-col  :span="5"><el-input v-model="titleUploadData.contacts"/></el-col>
        <el-col  :span="2"><el-text>收款日期:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('delivery.paymentDate')}}:</el-text></el-col>
        <el-col  :span="5">
          <el-date-picker
              v-model="titleUploadData.payDate"
              type="date"
              placeholder="选择日期"/>
              :placeholder="$t('delivery.selectDate')"/>
        </el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>收款方式:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('delivery.paymentMethod')}}:</el-text></el-col>
        <el-col  :span="3">
          <el-select v-model="titleUploadData.payMethod"  clearable placeholder=""  >
            <el-option
@@ -585,28 +589,28 @@
            />
          </el-select>
        </el-col>
        <el-col  :span="2"><el-text>联系电话:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.telephone')}}:</el-text></el-col>
        <el-col  :span="5"><el-input v-model="titleUploadData.contactNumber"/></el-col>
        <el-col  :span="2"><el-text>送货地址:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('customer.address')}}:</el-text></el-col>
        <el-col  :span="5"><el-input v-model="titleUploadData.deliveryAddress"/></el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>备注:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('basicData.remarks')}}:</el-text></el-col>
        <el-col  :span="3"><el-input v-model="titleUploadData.remarks"/></el-col>
        <el-col  :span="2"><el-text>报表日期:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('delivery.deliveryReportDate')}}:</el-text></el-col>
        <el-col  :span="5"><el-input v-model="titleUploadData.createTime" :readonly="true"></el-input></el-col>
        <el-col  :span="2"><el-text>发货报表日期:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('delivery.deliveryDate')}}:</el-text></el-col>
        <el-col  :span="5">
          <el-date-picker
              v-model="titleUploadData.deliveryDate"
              type="date"
              placeholder="选择日期"/>
              :placeholder="$t('delivery.selectDate')"/>
        </el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>业务员:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.salesman')}}:</el-text></el-col>
        <el-col  :span="3"><el-input v-model="titleUploadData.salesman" :readonly="true"/></el-col>
        <el-col  :span="2"><el-text>发货员:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('delivery.shipper')}}:</el-text></el-col>
        <el-col  :span="5"><el-input v-model="titleUploadData.creator" :readonly="true"/></el-col>
      </el-row>
    </div>
@@ -671,4 +675,11 @@
  width: 100%;
  height: 70%;
}
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
</style>
north-glass-erp/northglass-erp/src/views/sd/delivery/Delivery.vue
@@ -2,6 +2,10 @@
import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue"
import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const router = useRouter()
@@ -16,10 +20,10 @@
  <div id="main-div">
    <div id="div-title">
      <el-breadcrumb :separator-icon="ArrowRight">
        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/delivery/selectDelivery' }">发货首页</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/delivery/selectOrderList' }">订单发货</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/delivery/deliveryReport' }">报表</el-breadcrumb-item>
        <el-breadcrumb-item v-show="false" :to="{ path: '/main/delivery/deliveryReport' }">报表</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/delivery/selectDelivery' }">{{$t('delivery.shippingHomepage')}}</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/delivery/selectOrderList' }">{{$t('delivery.orderShipment')}}</el-breadcrumb-item>
<!--        <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/delivery/deliveryReport' }">{{$t('productStock.reportForms')}}</el-breadcrumb-item>-->
      </el-breadcrumb>
    </div>
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectDelivery.vue
@@ -7,6 +7,10 @@
import VXETable from "vxe-table";
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const router = useRouter()
const userStore = useUserInfoStore()
const username = userStore.user.userName
@@ -19,8 +23,20 @@
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
      let flowData = ref({
        deliveryId:row.deliveryId
      })
      request.post("/Delivery/deleteDelivery",flowData.value).then((res) => {
        if(res.code==200){
          ElMessage.success(t('searchOrder.msgDeleteSuccess'))
          router.push({path:'/main/delivery/selectDelivery',query:{random:Math.random()}})
        }else{
          ElMessage.warning(res.msg)
          router.push("/login")
        }
      })
      return
    }
  }
}
@@ -172,24 +188,24 @@
  },//表头参数
  columns:[
    {type:'expand',slots: { content:'content' },width: 60},
    {title: '操作', width: 110, slots: { default: 'button_slot' }},
    {type: 'seq', title: '自序', width: 80 },
    {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' }},
    {type: 'seq', title: t('basicData.Number'), width: 80 },
    {field: 'deliveryState',title: '审核', width: 40, slots: { default: 'state' }},
    {field: 'stockState',title: '出库', width: 40, slots: { default: 'state' }},
    {field: 'deliveryState',title: t('basicData.review'), width: 40, slots: { default: 'state' }},
    {field: 'stockState',title: t('productStock.outbound'), width: 40, slots: { default: 'state' }},
    {field: 'deliveryId',width:120,  title: '发货单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'creator',width:120,  title: '发货员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'deliveryDate',width:120,  title: '发货日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'customerId',width:120,  title: '客户编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'customerName',width:120,  title: '客户名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'project',width:120,  title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId',width:120,   title: '订单编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    //{field: '11',width:120,  title: '付款条件',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'payMethod',width:120,  title: '付款方式',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity',width:120,  title: '总数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'area',width:120,  title: '总面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'createTime',width:120,  title: '创建日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }}
    {field: 'deliveryId',width:120,  title: t('delivery.deliveryNoteNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'creator',width:120,  title: t('delivery.shipper'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'deliveryDate',width:120,  title: t('delivery.deliveryDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'customerId',width:120,  title: t('customer.customerNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'customerName',width:120,  title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'project',width:120,  title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderId',width:120,   title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'paymentTerms',width:120,  title: t('delivery.paymentTerms'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'payMethod',width:120,  title:t('delivery.paymentMethod'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'area',width:120,  title: t('productStock.totalArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'createTime',width:120,  title: t('productStock.statementDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }}
  ],//表头按钮
@@ -206,7 +222,7 @@
    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)
@@ -230,7 +246,7 @@
        value-format="YYYY-MM-DD"
    />
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">查询</el-button>
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button>
    <vxe-grid
        max-height="97%"
        @filter-change="filterChanged"
@@ -259,8 +275,8 @@
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" 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,'edit')" link type="primary" size="small">{{$t('basicData.edit')}}</el-button>
        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
north-glass-erp/northglass-erp/src/views/sd/delivery/SelectOrderList.vue
@@ -7,6 +7,10 @@
import VXETable from "vxe-table";
import useUserInfoStore from "@/stores/userInfo";
import {ElMessage} from "element-plus";
import { useI18n } from 'vue-i18n'
//语言获取
const { t } = useI18n()
const router = useRouter()
const userStore = useUserInfoStore()
const username = userStore.user.userName
@@ -176,36 +180,36 @@
  columns:[
    {type:'expand',slots: { content:'content' },width: 60,fixed:"left"},
    {type:'checkbox',title: '选择', width: 80,fixed:"left"},
    {type: 'seq', title: '自序', width: 80 ,fixed:"left"},
    {type:'checkbox',title: t('basicData.check'), width: 80,fixed:"left"},
    {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left"},
    {field: 'createOrder',title: '下单', width: 40, slots: { default: 'state' }},
    {field: 'processReview',title: '工艺', width: 40, slots: { default: 'state' }},
    {field: 'orderReview',title: '审核', width: 40, slots: { default: 'state' }},
    {field: 'productionOrder',title: '生产', width: 40, slots: { default: 'state' }},
    {field: 'processingCard',title: '流程卡', width: 60, slots: { default: 'state' }},
    {field: 'warehousing',title: '入库', width: 40, slots: { default: 'state' }},
    {field: 'delivery',title: '发货', width: 40, slots: { default: 'state' }},
    {field: 'createOrder',title: t('delivery.place'), width: 40, slots: { default: 'state' }},
    {field: 'processReview',title: t('delivery.technology'), width: 40, slots: { default: 'state' }},
    {field: 'orderReview',title: t('basicData.review'), width: 40, slots: { default: 'state' }},
    {field: 'productionOrder',title: t('delivery.produce'), width: 40, slots: { default: 'state' }},
    {field: 'processingCard',title: t('delivery.traveler'), width: 60, slots: { default: 'state' }},
    {field: 'warehousing',title: t('delivery.warehousing'), width: 40, slots: { default: 'state' }},
    {field: 'delivery',title: t('delivery.delivery'), width: 40, slots: { default: 'state' }},
    {field: 'orderId',width:120,  title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'customerId',width:120,  title: '客户编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'customerName',width:120,  title: '客户名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'quantity',width:120,  title: '总数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: '可用库存',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'project',width:120,  title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'batch',width:120,  title: '批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'money',width:120,   title: '总金额',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'area',width:120,  title: '总面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'createTime',width:120,  title: '报表日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'packType',width:120,  title: '包装方式',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderType',width:120,  title: '订单类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'creator',width:120,  title: '创建人',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
    {field: 'orderId',width:120,  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'customerId',width:120,  title: t('customer.customerNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'customerName',width:120,  title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'finishedGoodsInventory.quantityAvailable',width:120,  title: t('delivery.availableStock'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'project',width:120,  title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'batch',width:120,  title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'money',width:120,   title: t('order.money'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'area',width:120,  title: t('productStock.totalArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'createTime',width:120,  title: t('productStock.statementDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'packType',width:120,  title: t('order.packType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderType',width:120,  title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'creator',width:120,  title:t('productStock.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
  ],//表头按钮
  toolbarConfig: {
    buttons: [
      {'code': 'add', 'name': '发货',status: 'primary',icon: 'vxe-icon-add'}
      {'code': 'add', 'name': t('delivery.delivery'),status: 'primary',icon: 'vxe-icon-add'}
    ],
    /*import: false,
   export: true,
@@ -217,7 +221,7 @@
    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)
@@ -238,7 +242,7 @@
          if (selectRecords.length === 0) {
            ElMessage.warning("未选中数据")
            ElMessage.warning(t('productStock.unselectedData'))
            return
          }
          let order_id=""
@@ -253,7 +257,7 @@
          }
          //判断所选客户是否相同
          if(!isAllEqual(array)){
            ElMessage.warning("请选择相同的客户订单")
            ElMessage.warning(t('delivery.pleaseSelectTheSameCustomerOrder'))
            return
          }
@@ -292,7 +296,7 @@
        value-format="YYYY-MM-DD"
    />
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">查询</el-button>
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button>
    <vxe-grid
        max-height="97%"
        class="mytable-scrollbar"
@@ -318,8 +322,8 @@
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" 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,'edit')" link type="primary" size="small">{{$t('basicData.edit')}}</el-button>
        <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
@@ -9,7 +9,8 @@
import SelectProduct from "@/views/sd/product/SelectProduct.vue"
import {changeFilterEvent,filterChanged} from "@/hook"
import {addListener,toolbarButtonClickEvent} from "@/hook/mouseMove";
import {CaretBottom} from "@element-plus/icons-vue";
import {useI18n} from "vue-i18n"
const { t } = useI18n()
let dialogTableVisible = ref(false)
let productVisible = ref(false)
@@ -31,7 +32,7 @@
  orderId:'',
  deliveryDate:'',
  batch:'',
  calculateType:'',
  calculateType:null,
  salesmanId:'',
  salesman:'',
  alType:'',
@@ -79,12 +80,12 @@
    body: {
      options: [
        [
          { code: 'addRow', name: '添加', prefixIcon: 'vxe-icon-square-plus', visible: true, disabled: false },
          { code: 'deleteRow', name: '删除', prefixIcon: 'vxe-icon-delete', visible: true, disabled: true },
          { 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: 'computedMoney', name: '计算金额', prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: true },
          { code: 'addRow', name: t('basicData.add'), prefixIcon: 'vxe-icon-square-plus', visible: true, disabled: false },
          { code: 'deleteRow', name: t('basicData.delete'), prefixIcon: 'vxe-icon-delete', visible: true, disabled: true },
          { 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 },
          { code: 'computedMoney', name: t('basicData.calculateAmount'), prefixIcon: 'vxe-icon-chart-bar-x', visible: true, disabled: true },
        ]
      ]
    }
@@ -105,45 +106,44 @@
    showStatus: true
  },//表头参数
  columns:[
    {type: 'seq',fixed:"left", title: '自序', width: 80 },
    {type: 'seq',fixed:"left", title: t('basicData.Number'), width: 80 },
    // {field: 'buildingNumber',width:120,  title: '楼号',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'productId',width:100,  title: '产品ID',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productName',width:120,  title: '产品',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'price',width:140,  title: '单价',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'quantity',width:120,  title: '数量',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'grossAmount',width:120,  title: '总金额',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'width',width:120,  title: '宽',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'height',width:120,  title: '高',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'area',width:150,  title: '实际单片面积',filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'grossArea',width:140,  title: '实际总面积',filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'computeArea',width:180,  title: '结算单片面积',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'computeGrossArea',width:140,  title: '结算总面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'shape',width:120,  title: '形状',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'bendRadius',width:140,  title: '弯钢弧度',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'edgingType',width:140,  title: '磨边类型',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'processingNote',width:140,  title: '加工要求',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'remarks',width:120,  title: '备注',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}
    {field: 'productId',width:140,  title: t('order.productId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'productName',width:300,  title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'price',width:140,  title: t('order.price'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'quantity',width:140,  title: t('order.quantity'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'grossAmount',width:160,  title: t('order.grossAmount'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'width',width:120,  title: t('order.width') ,editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'height',width:140,  title: t('order.height'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'area',width:150,  title: t('order.trueArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'grossArea',width:160,  title: t('order.trueGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged},
    {field: 'computeArea',width:180,  title: t('order.computeArea'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'computeGrossArea',width:200,  title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'shape',width:120,  title: t('order.shape'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'bendRadius',width:160,  title: t('order.bendRadius'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'edgingType',width:160,  title: t('order.edgingType'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'processingNote',width:200,  title: t('order.processingNote'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'remarks',width:140,  title: t('basicData.remarks'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}
  ],
  //表单验证
  editRules: {
    buildingNumber: [
      { required: false},
      { min: 0, max: 255, message: '名称长度在 0 到 255 个字符' }
      { min: 0, max: 255, message: t('basicData.msg.max255') }
    ],
    productId: [
      { required: true, message: '请选择产品' }
      { required: true, message: t('order.msg.productCheck') }
    ],
    productName: [
      { required: true, message: '请选择产品' }
      { required: true, message: t('order.msg.productCheck') }
    ],
    price: [
      {
        validator ({ cellValue }) {
          const regex = /^(0(\.\d{1,2})?|([1-9]\d{0,4})(\.\d{1,2})?|99999(\.9{1,2})?)$/
          if ( !regex.test(cellValue) ) {
            return new Error('输入0.00~99999.99的数字')
            return new Error(t('basicData.msg.range99999Dec2') )
          }
        }
      }
@@ -153,7 +153,7 @@
        validator ({ cellValue }) {
          const regex = /^(0(\.\d{1,2})?|([1-9]\d{0,4})(\.\d{1,2})?|99999(\.9{1,2})?)$/
          if (!regex.test(cellValue)) {
            return new Error('输入0.00~99999.99的数字')
            return new Error(t('basicData.msg.range99999Dec2'))
          }
        }
      }
@@ -164,7 +164,7 @@
        validator ({ cellValue }) {
          const regex = /^[1-9]\d*$/
          if (!regex.test(cellValue)) {
            return new Error('输入大于0的整数')
            return new Error(t('basicData.msg.greater0'))
          }
        }}
    ],
@@ -173,7 +173,7 @@
        validator ({ cellValue }) {
          const regex = /^(0(\.\d{1,2})?|([1-9]\d{0,4})(\.\d{1,2})?|99999(\.9{1,2})?)$/
          if (!regex.test(cellValue)) {
            return new Error('输入0.00~99999.99的数字')
            return new Error(t('basicData.msg.range99999Dec2'))
          }
        }
      }
@@ -183,7 +183,7 @@
        validator ({ cellValue }) {
          const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/
          if ( !regex.test(cellValue)) {
            return new Error('输入0.00~99999.99的数字')
            return new Error(t('basicData.msg.range99999Dec2'))
          }
        }
      }
@@ -191,11 +191,11 @@
  },
  toolbarConfig: {
    buttons: [
      {'code': 'remarks', 'name': '加工要求'},
      {'code': 'Craft', 'name': '工艺',status: 'primary',disabled: true},
      {'code': 'review', 'name': '审核',status: 'primary',disabled: true},
      {'code': 'updateMoney', 'name': '金额重置',status: 'primary',disabled: true},
      {'code': 'saveOrder', 'name': '保存',status: 'primary',icon: 'vxe-icon-save',disabled: false}
      {'code': 'remarks', 'name': t('order.processingNote')},
      {'code': 'Craft', 'name': t('order.technology'),status: 'primary',disabled: true},
      {'code': 'review', 'name': t('basicData.review'),status: 'primary',disabled: true},
      {'code': 'updateMoney', 'name': t('order.amountReset'),status: 'primary',disabled: true},
      {'code': 'saveOrder', 'name': t('basicData.save'),status: 'primary',icon: 'vxe-icon-save',disabled: false}
    ],
    slots: {
      tools: 'toolbar_buttons'
@@ -212,7 +212,7 @@
    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)
@@ -250,39 +250,39 @@
        }
        case 'saveOrder': {
          if ($grid.getTableData().tableData.length === 0){
            ElMessage.error('没有表格数据!')
            ElMessage.error( t('order.msg.tableLengthNot'))
            return
          }
          if(!gridOptions.menuConfig.body.options[0][5].disabled){
            ElMessage.error('请先打开右击菜单重新计算金额后,再保存!')
            ElMessage.error(t('order.msg.amountReset'))
            return
          }
          const project = titleUploadData.value.project
          if(project === null || project === undefined || project === ''){
            ElMessage.error('输入项目名称!')
            ElMessage.error(t('order.msg.projectCheck'))
            return
          }
          const customer = titleUploadData.value.customerId
          if(customer === null || customer === undefined || customer === ''){
            ElMessage.error('请选择客户!')
            ElMessage.error(t('order.msg.customerCheck'))
            return
          }
          const salasMan = titleUploadData.value.salesman
          if(salasMan === null || salasMan === undefined || salasMan === ''){
            ElMessage.error('请选择业务员!')
            ElMessage.error(t('order.msg.salasManCheck'))
            return
          }
          const calculateType = titleUploadData.value.calculateType
          if(calculateType === null || calculateType === undefined || calculateType === ''){
            ElMessage.error('请选择计算方式!')
            ElMessage.error(t('order.msg.calculateTypeCheck'))
            return
          }
          if ($grid) {
            const errMap = await $grid.validate(true)
            if (errMap) {
              ElMessage.error(`校验不通过!`)
              ElMessage.error(t('basicData.msg.checkoutLose'))
              return
            }
            let order ={
@@ -306,7 +306,7 @@
        }
        case 'addRow': {
          if ($grid.getTableData().tableData.length >=240){
            ElMessage.error('表格数据已达到最大值!')
            ElMessage.error(t('order.msg.tableLengthMax'))
            return
          }
          $grid.insert({})
@@ -392,7 +392,7 @@
//获取子页面产品方法
const getProductRow = (row) => {
  if(row.state!=1){
    ElMessage.warning('该产品还未审核')
    ElMessage.warning(t('order.msg.productStateCheck'))
    return
  }
@@ -413,7 +413,6 @@
  }
  request.post(`/order/getOrderById/${str}`).then((res) => {
    if(res.code==200){
      console.log(res.data.order)
      titleUploadData.value = res.data.order
      //取消工艺按钮禁用
      gridOptions.toolbarConfig.buttons[1].disabled = false
@@ -430,7 +429,7 @@
      if(res.data.order.orderReview === 2){
        gridOptions.toolbarConfig.buttons[2].disabled = false
        gridOptions.toolbarConfig.buttons[2].code='reviews'
        gridOptions.toolbarConfig.buttons[2].name='反审'
        gridOptions.toolbarConfig.buttons[2].name=t('basicData.cancelReview')
        gridOptions.toolbarConfig.buttons[3].disabled = false
      }
      if(res.data.order.productionOrder !==0 ){
@@ -455,6 +454,7 @@
    titleUploadData.value.icon = titleSelectJson.value.icon[0].basicName
    titleUploadData.value.packType = titleSelectJson.value.packType[0].basicName
    titleUploadData.value.alType = titleSelectJson.value.alType[0].basicName
    titleUploadData.value.calculateType=1
    const today = new Date
    today.setTime(today.getTime() + (15 * 24 * 60 * 60 * 1000))
    titleUploadData.value.deliveryDate = today.getFullYear() +
@@ -469,7 +469,7 @@
const saveOrder = (order) => {
  request.post(`/order/saveOrder`,order).then((res) => {
    if(res.code==200){
      ElMessage.success('保存成功')
      ElMessage.success(t('basicData.msg.saveSuccess'))
      router.push({path:'/main/order/selectOrder'})
    }else {
      ElMessage.error(res.msg)
@@ -485,7 +485,7 @@
  }
  request.post(`/order/updateOrderMoney`,updateData).then(res => {
    if (res.code == 200){
      ElMessage.success('更新金额成功')
      ElMessage.success( t('order.msg.updateAmountSuccessfully') )
      router.push({path:'/main/order/createOrder',query:{orderId:titleUploadData.value.orderId,random:Math.random()}})
    }
@@ -500,13 +500,13 @@
    if(res.code==200){
      gridOptions.toolbarConfig.buttons[2].disabled = true
      if(state==2){
        ElMessage.success('审核成功!')
        ElMessage.success(t('basicData.msg.ReviewSuccess') )
      }else if (state==0){
        ElMessage.success('反审成功!')
        ElMessage.success(t('basicData.msg.cancelReviewSuccess'))
      }
      setTimeout(() =>{
        location.reload()
      },1500)
      router.push({path:'/main/order/createOrder',query:{
        orderId:titleUploadData.value.orderId,
        random:Math.random()}})
    }else{
      ElMessage.error(res.msg)
@@ -554,7 +554,10 @@
    const workbook = XLXS.read(data, { type: 'binary' })
    let jsonData = XLXS.utils.sheet_to_json(workbook.Sheets.Sheet1).slice(1)
    if(jsonData.length>240){
      ElMessage.error(`导入${jsonData.length}条,数据不能超过240条,请分订单导入`)
      ElMessage.error(`${t('order.msg.importMaxCheckFailFirst')}
                          ${jsonData.length}
                          ${t('order.msg.importMaxCheckFailMid')}
                          ${t('order.msg.importMaxCheckFailLast')}`)
      return
    }
    jsonData.forEach((item,index) => {
@@ -598,15 +601,15 @@
  <div class="main-div">
    <div class="order-primary" style="background-color: white">
      <el-row>
        <el-col  :span="2"><el-text>*项目名称:</el-text></el-col>
        <el-col  :span="2"><el-text>*{{$t('order.project')}}:</el-text></el-col>
        <el-col  :span="2"><el-input v-model="titleUploadData.project"/></el-col>
        <el-col  :span="2"><el-text>*客户选择:</el-text></el-col>
        <el-col  :span="2"><el-text>*{{$t('order.customers')}}:</el-text></el-col>
        <el-col  :span="2">
          <el-select  v-model="titleUploadData.customerId"
                      @change="changeCustomer"
                      filterable
                      clearable
                      placeholder="" >
                      placeholder=" " >
            <el-option v-for="item in titleSelectJson['customer']"
                       :key="item.id"
                       :label="item.id+' '+item.customerName"
@@ -614,7 +617,7 @@
                       />
          </el-select>
        </el-col>
        <el-col  :span="2"><el-text>*订单类型:</el-text></el-col>
        <el-col  :span="2"><el-text>*{{$t('order.orderType')}}:</el-text></el-col>
        <el-col  :span="2">
          <el-select v-model="titleUploadData.orderType"  clearable placeholder=""  >
            <el-option
@@ -625,7 +628,7 @@
            />
          </el-select>
        </el-col>
        <el-col  :span="2"><el-text>订单分类:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.orderClassify')}}:</el-text></el-col>
        <el-col  :span="2">
          <el-select v-model="titleUploadData.orderClassify"  clearable placeholder=" " >
            <el-option
@@ -636,7 +639,7 @@
            />
          </el-select>
        </el-col>
        <el-col  :span="2"><el-text>商标选项:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.icon')}}:</el-text></el-col>
        <el-col  :span="2">
          <el-select v-model="titleUploadData.icon"  clearable placeholder=" " >
            <el-option  v-for="item in titleSelectJson['icon']"
@@ -645,7 +648,7 @@
                       :value="item.basicName"/>
          </el-select>
        </el-col>
        <el-col  :span="2"><el-text>包装方式:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.packType')}}:</el-text></el-col>
        <el-col  :span="2">
          <el-select v-model="titleUploadData.packType"  clearable placeholder=" " >
            <el-option v-for="item in titleSelectJson['packType']"
@@ -657,9 +660,9 @@
        <!--      <el-col :span="2"><el-text  /></el-col>-->
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>销售单号:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.orderId')}}:</el-text></el-col>
        <el-col  :span="2"><el-text  >{{titleUploadData.orderId}}</el-text></el-col>
        <el-col  :span="2"><el-text>交货日期:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.deliveryDate')}}:</el-text></el-col>
        <el-col  :span="2">
          <el-date-picker
              v-model="titleUploadData.deliveryDate"
@@ -667,15 +670,15 @@
              placeholder=""
              />
        </el-col>
        <el-col  :span="2"><el-text>批次:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.batch')}}:</el-text></el-col>
        <el-col  :span="2"><el-input  v-model="titleUploadData.batch"/></el-col>
        <el-col  :span="2"><el-text>计算方式:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.calculateType')}}:</el-text></el-col>
        <el-col  :span="2">
          <el-select v-model="titleUploadData.calculateType"  clearable placeholder=" " >
            <el-option :value="1" label="面积金额(单片)"/>
          </el-select>
        </el-col>
        <el-col  :span="2"><el-text>*业务员:</el-text></el-col>
        <el-col  :span="2"><el-text>*{{$t('order.salesman')}}:</el-text></el-col>
        <el-col  :span="2">
          <el-select
              v-model="titleUploadData.salesmanId"
@@ -689,7 +692,7 @@
                       :value="item.id"/>
          </el-select>
        </el-col>
        <el-col  :span="2"><el-text>铝条方式:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.alType')}}</el-text></el-col>
        <el-col  :span="2">
          <el-select v-model="titleUploadData.alType" clearable placeholder=" " >
            <el-option v-for="item in titleSelectJson['alType']"
@@ -700,17 +703,17 @@
        </el-col>
      </el-row>
      <el-row>
        <el-col  :span="2"><el-text>总金额:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.money')}}:</el-text></el-col>
        <el-col  :span="2"><el-text >{{titleUploadData.money}}</el-text></el-col>
        <el-col  :span="2"><el-text>合同编号:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.customers')}}:</el-text></el-col>
        <el-col  :span="2"><el-input v-model="titleUploadData.contractId"/></el-col>
        <el-col  :span="2"><el-text>客户批次:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.customerBatch')}}:</el-text></el-col>
        <el-col  :span="2"><el-input v-model="titleUploadData.customerBatch"/></el-col>
        <el-col  :span="2"><el-text>联系人:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.contacts')}}:</el-text></el-col>
        <el-col  :span="2"><el-input v-model="titleUploadData.contacts" /></el-col>
        <el-col  :span="2"><el-text>联系电话:</el-text></el-col>
        <el-col  :span="2"><el-text>{{$t('order.contactNumber')}}:</el-text></el-col>
        <el-col  :span="2"><el-input v-model="titleUploadData.contactNumber"/></el-col>
        <el-col  :span="2"><el-text >送货地址:</el-text></el-col>
        <el-col  :span="2"><el-text >{{$t('order.deliveryAddress')}}:</el-text></el-col>
        <el-col  :span="2"><el-input v-model="titleUploadData.deliveryAddress"/></el-col>
      </el-row>
<!--      <el-row>-->
@@ -740,13 +743,13 @@
          </div>
        </template>
        <template #toolbar_buttons>
          <vxe-button  @click="importEvent">导入</vxe-button>
          <vxe-button  @click="importEvent">{{$t('order.import')}}</vxe-button>
        </template>
      </vxe-grid>
    </div>
    <el-dialog v-model="dialogTableVisible" title="加工要求" style="width: 60%;height:75% ">
    <el-dialog v-model="dialogTableVisible" :title="$t('order.processingNote')" style="width: 60%;height:75% ">
      <el-input
          v-model="titleUploadData.processingNote"
          type="textarea"
@@ -756,12 +759,7 @@
    <el-dialog v-model="productVisible"  style="width: 80%;height:75% ">
      <select-product :rowIndex="rowIndex" @getProductRow="getProductRow" style="width: 100%;height: 100%" />
    </el-dialog>
<!--选中表格 -->
<!--    <div class="vxe-table&#45;&#45;cell-area" ref="cellArea" >-->
<!--      <span  class="vxe-table&#45;&#45;cell-main-area"  ></span>-->
<!--      <span class="vxe-table&#45;&#45;cell-active-area"  ></span>-->
<!--    </div>-->
  </div>
</template>
north-glass-erp/northglass-erp/src/views/sd/order/Order.vue
@@ -1,6 +1,8 @@
<script setup>
import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue"
import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router";
import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router"
import {useI18n} from "vue-i18n"
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
let indexFlag=$ref(1)
@@ -18,9 +20,9 @@
  <div id="main-div">
    <div id="div-title">
      <el-breadcrumb :separator-icon="ArrowRight">
        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/order/selectOrder' }">订单首页</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/order/createOrder' }">创建</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/order/orderReport' }">报表</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/order/selectOrder' }">{{$t('order.orderHomePage')}}</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/order/createOrder' }">{{$t('basicData.create')}}</el-breadcrumb-item>
        <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/order/orderReport' }">{{$t('order.orderReport')}}</el-breadcrumb-item>
        <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">报表</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
north-glass-erp/northglass-erp/src/views/sd/order/SelectOrder.vue
@@ -1,13 +1,15 @@
<script setup>
  import {Search} from "@element-plus/icons-vue"
  import {useRouter} from "vue-router"
  import {reactive, ref} from "vue";
  const router = useRouter()
  import {reactive, ref} from "vue"
  import ProcessCardProgress from '@/views/pp/report/ProcessCardProgress.vue'
  import request from "@/utils/request";
  import deepClone from "@/utils/deepClone";
  import {ElMessage} from "element-plus";
  import {VXETable} from "vxe-table";
  import deepClone from "@/utils/deepClone"
  import {ElMessage} from "element-plus"
  import {VXETable} from "vxe-table"
  import {useI18n} from "vue-i18n"
  const { t } = useI18n()
  const router = useRouter()
  const xGrid = ref()
@@ -41,35 +43,35 @@
    },//表头参数
    columns:[
      {type:'expand',slots: { content:'content' },width: 50,fixed:"left",},
      {title: '操作', width: 110, slots: { default: 'button_slot' },fixed:"left",},
      {type: 'seq', title: '自序', width: 80 ,fixed:"left",},
      {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left",},
      {type: 'seq', title: t('basicData.Number'), width: 80 ,fixed:"left",},
      {field:'createOrder',title: '下单', width: 40, slots: { default: 'state' }},
      {field:'processReview',title: '工艺', width: 40, slots: { default: 'state' }},
      {field:'orderReview',title: '审核', width: 40, slots: { default: 'state' }},
      {field:'productionOrder',title: '工单', width: 40, slots: { default: 'state' }},
      {field:'processingCard',title: '流程', width: 40, slots: { default: 'state' }},
      {field:'warehousing',title: '入库', width: 40, slots: { default: 'state' }},
      {field:'delivery',title: '发货', width: 40, slots: { default: 'state' }},
      {field:'createOrder',title: t('searchOrder.createOrder'), width: 40, slots: { default: 'state' }},
      {field:'processReview',title: t('order.technology'), width: 40, slots: { default: 'state' }},
      {field:'orderReview',title: t('basicData.review'), width: 40, slots: { default: 'state' }},
      {field:'productionOrder',title: t('searchOrder.production'), width: 40, slots: { default: 'state' }},
      {field:'processingCard',title: t('searchOrder.process'), width: 40, slots: { default: 'state' }},
      {field:'warehousing',title: t('searchOrder.storage'), width: 40, slots: { default: 'state' }},
      {field:'delivery',title: t('searchOrder.delivery'), width: 40, slots: { default: 'state' }},
      {field: 'orderId',width:120,  title: '销售单号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'customerId',width:120,  title: '客户编号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'customerName',width:120,  title: '客户名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'project',width:120,  title: '项目名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'batch',width:120,  title: '批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'quantity',width:120,  title: '数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: '14',width:120,  title: '库存数', sortable: true},
      {field: 'area',width:120,  title: '总结算面积',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'createTime',width:120,   title: '报表日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'packType',width:120,  title: '包装方式',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'orderType',width:120,  title: '订单类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'salesman',width:120,  title: '业务员',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'perimeter',width:120,  title: '周长',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'deliveryDate',width:120,  title: '交货日期',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'customerBatch',width:120,  title: '客户批次',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'orderId',width:120,  title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'customerId',width:120,  title: t('customer.customerNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'customerName',width:120,  title: t('customer.customerName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'project',width:120,  title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'batch',width:120,  title: t('order.batch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: '14',width:120,  title: t('searchOrder.inventoryNum'), sortable: true},
      {field: 'area',width:120,  title: t('order.computeGrossArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'createTime',width:120,   title: t('basicData.reportData'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'packType',width:120,  title: t('order.packType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'orderType',width:120,  title: t('order.orderType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'salesman',width:120,  title: t('order.salesman'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'perimeter',width:120,  title: t('searchOrder.perimeter'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'deliveryDate',width:120,  title: t('order.deliveryDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'customerBatch',width:120,  title: t('order.customerBatch'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      //{field: '14',width:120,  title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
      {field: 'deliveryAddress',width:120,  title: '地址',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
      {field: 'deliveryAddress',width:120,  title: t('order.deliveryAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
    ],//表头按钮
    toolbarConfig: {
@@ -91,7 +93,7 @@
      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)
@@ -109,7 +111,7 @@
        switch (code) {
          case 'checkList': {
            if($grid.getCheckboxRecords().length==0){
              VXETable.modal.message( '请选择一条数据!')
              VXETable.modal.message( t('searchOrder.msg'))
              return
            }
            break
@@ -219,15 +221,15 @@
      }
      case 'delete': {
        if (row.processReview === 2) {
          ElMessage.warning('已审核的订单不能删除')
          ElMessage.warning(t('searchOrder.msgDelete'))
          return
        }
        request.post(`/order/deleteOrder/${row.orderId}`).then((res) => {
          if(res.code==200){
            ElMessage.success('删除成功')
            location.reload()
            ElMessage.success(t('searchOrder.msgDeleteSuccess'))
            router.push({path:'/main/order/selectOrder',query:{random:Math.random()}})
          }else{
            ElMessage.warning('删除失败')
            ElMessage.warning(t('searchOrder.msgDeleteFail'))
          }
        })
        break
@@ -244,13 +246,13 @@
    <el-date-picker
        v-model="selectDate"
        type="daterange"
        start-placeholder="开始时间"
        end-placeholder="结束时间"
        :start-placeholder="$t('basicData.startDate')"
        :end-placeholder="$t('basicData.startDate')"
        format="YYYY-MM-DD"
        value-format="YYYY-MM-DD"
    />
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">查询</el-button>
    <el-button @click="changeDate" style="margin-top: -5px"  id="searchButton" type="primary" :icon="Search">{{ $t('basicData.search') }}</el-button>
    <vxe-grid
        @filter-change="filterChanged"
        @cell-dblclick="cellClickEvent"
@@ -276,10 +278,10 @@
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button>
        <el-popconfirm @confirm="getTableRow(row,'delete')" title="确认删除订单?">
        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{ $t('basicData.edit') }}</el-button>
        <el-popconfirm @confirm="getTableRow(row,'delete')" :title="$t('basicData.deleteConfirm')">
          <template #reference>
            <el-button  link type="primary" size="small">删除</el-button>
            <el-button  link type="primary" size="small">{{ $t('basicData.delete') }}</el-button>
          </template>
        </el-popconfirm>
      </template>
@@ -293,10 +295,10 @@
      </template>
      <template #toolbar_buttons>
        <vxe-select @change="changeOrderType" v-model="orderType" placeholder="订单类型">
          <vxe-option value="2" label="正常订单"></vxe-option>
          <vxe-option value="-2" label="作废订单"></vxe-option>
          <vxe-option value="0" label="全部订单"></vxe-option>
        <vxe-select @change="changeOrderType" v-model="orderType" :placeholder="$t('searchOrder.orderType')">
          <vxe-option value="2" :label="$t('searchOrder.regularOrders')"></vxe-option>
          <vxe-option value="-2" :label="$t('searchOrder.cancelledOrders')"></vxe-option>
          <vxe-option value="0" :label="$t('searchOrder.allOrders')"></vxe-option>
        </vxe-select>
      </template>
north-glass-erp/northglass-erp/src/views/sd/order/UpdateOrderCraft.vue
@@ -4,7 +4,8 @@
import request from "@/utils/request"
import {ElMessage} from "element-plus"
import {changeFilterEvent,filterChanged} from "@/hook"
import SelectProduct from "@/views/sd/product/SelectProduct.vue";
import {useI18n} from "vue-i18n"
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
@@ -40,25 +41,25 @@
    showStatus: true
  },//表头参数
  columns:[
    {title: '操作', width: 110, slots: { default: 'button_slot' },fixed:"left",},
    {field: 'orderNumber',width:120,  title: '序号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {title: t('basicData.operate'), width: 110, slots: { default: 'button_slot' },fixed:"left",},
    {field: 'orderNumber',width:120,  title: t('order.OrderNum'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    //{field: 'orderDetail.buildingNumber',width:120,  title: '楼号',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
    {field: 'orderDetail.productName',width:120,  title: '成品名称',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'glassAddress',width:120,  title: '标记',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'glassChild',width:120,  title: '子产品',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.width',width:120,  title: '成品宽',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.height',width:120,  title: '成品高',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.shape',width:120,  title: '形状',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'totalArea',width:120,  title: '总尺寸',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'childWidth',width:120,  title: '单片宽',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'childHeight',width:120,  title: '单片高',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'area',width:120,  title: '单片尺寸',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.quantity',width:120,  title: '数量',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'process',width:120,  title: '工艺流程',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'icon',width:120,  title: '商标',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.processingNote',width:120,  title: '加工要求',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.remarks',width:120,  title: '备注',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.edgingType',width:120,  title: '磨边类型',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}
    {field: 'orderDetail.productName',width:120,  title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'glassAddress',width:120,  title: t('craft.glassAddress'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'glassChild',width:120,  title: t('craft.glassChild'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.width',width:120,  title: t('craft.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.height',width:120,  title: t('craft.height'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.shape',width:120,  title: t('order.shape'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'totalArea',width:120,  title: t('craft.totalArea'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'childWidth',width:120,  title: t('craft.childWidth'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'childHeight',width:120,  title: t('craft.childHeight'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'area',width:120,  title: t('craft.area'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.quantity',width:120,  title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'process',width:120,  title: t('craft.process'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'icon',width:120,  title: t('order.icon'),editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.processingNote',width:120,  title: t('order.processingNote'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.remarks',width:120,  title: t('order.remarks'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged},
    {field: 'orderDetail.edgingType',width:120,  title: t('order.edgingType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true,filterMethod:filterChanged}
  ],//表头按钮
  mergeCells: [
    /*{ row: 0, col: 1, rowspan: 4, colspan: 1 },
@@ -71,9 +72,9 @@
  ],
  toolbarConfig: {
    buttons: [
      {'code': 'remarks', 'name': '加工要求'},
      {'code': 'Craft', 'name': '订单详情',status: 'primary'},
      {'code': 'review', 'name': '审核',status: 'primary'},
      {'code': 'remarks', 'name': t('order.processingNote')},
      {'code': 'Craft', 'name': t('craft.orderDetail'),status: 'primary'},
      {'code': 'review', 'name': t('basicData.review'),status: 'primary'},
    ],
    // import: false,
    // export: true,
@@ -85,7 +86,7 @@
    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)
@@ -198,7 +199,7 @@
      if(res.data.order.processReview === 2 ){
        //gridOptions.toolbarConfig.buttons[2].disabled = false
        gridOptions.toolbarConfig.buttons[2].code='reviews'
        gridOptions.toolbarConfig.buttons[2].name='反审'
        gridOptions.toolbarConfig.buttons[2].name=t('basicData.cancelReview')
      }
@@ -223,13 +224,11 @@
    if(res.code==200){
      gridOptions.toolbarConfig.buttons[2].disabled = true
      if(state==2){
        ElMessage.success('审核成功!')
        ElMessage.success(t('basicData.msg.reviewSuccess'))
      }else if (state==0){
        ElMessage.success('反审成功!')
        ElMessage.success(t('basicData.msg.cancelReviewSuccess'))
      }
      setTimeout(() =>{
        location.reload()
      },1500)
      router.push({path:'/main/order/updateOrderCraft',query:{orderId:titleUploadData.value.orderId,random:Math.random()}})
    }else{
      ElMessage.error(res.msg)
@@ -247,25 +246,25 @@
    <div class="order-primary" style="background-color: white">
      <el-row>
        <el-col  :span="4"><el-text>销售单号:</el-text></el-col>
        <el-col  :span="4"><el-text>{{t('order.orderId')}}</el-text></el-col>
        <el-col  :span="4"><el-text>{{titleUploadData.orderId}}</el-text></el-col>
        <el-col  :span="4"><el-text>客户名称:</el-text></el-col>
        <el-col  :span="4"><el-text>{{t('customer.customerName')}}</el-text></el-col>
        <el-col  :span="4"><el-text>{{titleUploadData.customerName}}</el-text></el-col>
        <el-col  :span="4"><el-text>项目名称:</el-text></el-col>
        <el-col  :span="4"><el-text>{{t('order.project')}}</el-text></el-col>
        <el-col  :span="4"><el-text>{{titleUploadData.project}}</el-text></el-col>
      </el-row>
      <el-row>
        <el-col  :span="4"><el-text>订单批次:</el-text></el-col>
        <el-col  :span="4"><el-text>{{t('order.batch')}}</el-text></el-col>
        <el-col  :span="4"><el-text>{{titleUploadData.batch}}</el-text></el-col>
        <el-col  :span="4"><el-text>订单类型:</el-text></el-col>
        <el-col  :span="4"><el-text>{{t('order.orderType')}}</el-text></el-col>
        <el-col  :span="4"><el-text>{{ titleUploadData.orderType }}</el-text></el-col>
        <el-col  :span="4"><el-text>业务员</el-text></el-col>
        <el-col  :span="4"><el-text>{{t('order.salesman')}}</el-text></el-col>
        <el-col  :span="4"><el-text>{{titleUploadData.salesman}}</el-text></el-col>
      </el-row>
      <el-row>
        <el-col  :span="4"><el-text>包装方式:</el-text></el-col>
        <el-col  :span="4"><el-text>{{t('order.packType')}}</el-text></el-col>
        <el-col  :span="4"><el-text>{{titleUploadData.packType}}</el-text></el-col>
        <el-col  :span="4"><el-text>交货日期:</el-text></el-col>
        <el-col  :span="4"><el-text>{{t('order.deliveryDate')}}</el-text></el-col>
        <el-col  :span="4"><el-text>{{titleUploadData.deliveryDate}}</el-text></el-col>
      </el-row>
    </div>
@@ -291,7 +290,7 @@
        <!--左边固定显示的插槽-->
        <template #button_slot="{ row }">
          <el-button @click="updateCraft(row)" link type="primary" size="small">修改工艺</el-button>
          <el-button @click="updateCraft(row)" link type="primary" size="small">{{t('craft.updateCraft')}}</el-button>
        </template>
        <template #num1_filter="{ column, $panel }">
@@ -304,7 +303,7 @@
      </vxe-grid>
    </div>
    <el-dialog v-model="dialogTableVisible" title="加工要求" style="width: 60%;height:75% ">
    <el-dialog v-model="dialogTableVisible" :title="$t('order.processingNote')" style="width: 60%;height:75% ">
      <el-input
          v-model="titleUploadData.processingNote"
          type="textarea"
@@ -312,8 +311,8 @@
      />
    </el-dialog>
    <el-dialog v-model="craftVisible" title="工艺流程" style="width: 60%;height:60% ;position: relative;" >
      <h5>工艺属性</h5>
    <el-dialog v-model="craftVisible" :title="$t('craft.technologicalProcess')" style="width: 60%;height:60% ;position: relative;" >
      <h5>{{$t('craft.processAttribute')}}</h5>
      <el-checkbox
          v-model="craftObj.newCraft"
          v-for="item in process"
@@ -324,16 +323,16 @@
      <el-row style="width: 90%;border: 0;position: absolute;bottom: 1rem; left: 50%;transform: translateX(-50%);">
        <span class="ml-3 w-35 text-gray-600 inline-flex items-center"
        >原流程:
        >{{$t('craft.oldProcess')}}:
        </span>
        <el-input :value="oldCraftComputed" disabled class="w-50 m-2" />
        <span class="ml-3 w-35 text-gray-600 inline-flex items-center"
        >流程:
        >{{$t('craft.newProcess')}}:
        </span>
        <el-input :value="newCraftComputed" disabled class="w-50 m-2" />
        <el-col style="margin-top: 0.5rem">
          <el-button type="primary" @click="resetCraft">重置</el-button>
          <el-button type="primary" @click="saveCraft">保存</el-button>
          <el-button type="primary" @click="resetCraft">{{$t('craft.reset')}}</el-button>
          <el-button type="primary" @click="saveCraft">{{$t('basicData.save')}}</el-button>
        </el-col>
      </el-row>
north-glass-erp/northglass-erp/src/views/sd/product/CreateProduct.vue
@@ -548,7 +548,7 @@
              @click="updateHollowSure"
              size="small"
              type="primary"
              round>夹层间隔物修改</el-button>
              round>中空间隔物修改</el-button>
        </div>
        <div class="glass-spacer-zk">
          <el-select
@@ -740,7 +740,6 @@
          <el-col :span="16">
            <el-input
                :value="item.detail"
                value="5mm白玻"
                size="small"
                disabled  />
          </el-col>
north-glass-erp/src/main/java/com/example/erp/controller/sd/DeliveryController.java
@@ -76,6 +76,18 @@
        }
    }
    @ApiOperation("发货删除接口")
    @PostMapping("/deleteDelivery")
    public Result deleteDelivery( @RequestBody Map<String,Object> object){
        if(deliveryService.deleteDelivery(object)){
            return Result.seccess();
        }else {
            throw new ServiceException(Constants.Code_500,"删除失败");
        }
    }
north-glass-erp/src/main/java/com/example/erp/controller/userInfo/SysMenuController.java
@@ -21,7 +21,6 @@
    private SysMenuService sysMenuService;
    @GetMapping("/getMenu/{lang}")
    public Result getMenu(@PathVariable String lang){
        System.out.println(lang);
        MyChannelHandlerPool myChannelHandlerPool = new MyChannelHandlerPool();
        //myChannelHandlerPool.sendMsg("123");
        //MyChannelHandlerPool.channelGroup.writeAndFlush( new TextWebSocketFrame("123123"));
north-glass-erp/src/main/java/com/example/erp/mapper/sd/DeliveryMapper.java
@@ -40,6 +40,8 @@
    Boolean updateDeliveryToExamine(@Param("deliveryId") String deliveryId,@Param("deliveryState") int deliveryState);
    Boolean deleteDelivery(@Param("deliveryId") String deliveryId);
    Integer getmaximum(@Param("type") String type);
    Boolean updatedelivery(@Param("area") Double area,
north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java
@@ -215,6 +215,33 @@
    }
    public Boolean deleteDelivery(Map<String,Object> object) {
        boolean saveState = true;
        //设置回滚点
        Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
        try {
            String deliveryId = "";
            if (object.get("deliveryId") != null) {
                deliveryId = object.get("deliveryId").toString();
            }
            deliveryDetailMapper.deleteDeliveryDetail(deliveryId);
            deliveryMapper.deleteDelivery(deliveryId);
            return true;
        }catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
            //将异常传入数据库
            SysError sysError = new SysError();
            sysError.setError(e.toString());
            sysError.setFunc("saveOrder");
            sysErrorService.insert(sysError);
            saveState = false;
        }
        return saveState;
    }
    public String orderNumberSetting(String type) {
        //根据类型自动生成不同的操作单号
north-glass-erp/src/main/resources/mapper/mm/FinishedGoodsInventory.xml
@@ -162,7 +162,7 @@
                 left join sd.order_detail od on fgi.order_id = od.order_id and fgi.order_number = od.order_number
                 left join sd.`order` o on fgi.order_id = o.order_id
        <where>
                and fgi.quantity_available>0
                and fgi.status = 0 and fgi.quantity_available>0
            <if test="orderDetail.finishedGoodsInventory.orderId != null and orderDetail.finishedGoodsInventory.orderId != ''">
                and fgi.order_id regexp #{orderDetail.finishedGoodsInventory.orderId}
            </if>
north-glass-erp/src/main/resources/mapper/pp/ReworkMapper.xml
@@ -45,8 +45,7 @@
        <where>
            date(r.create_time)>=#{startDate} and date(r.create_time) &lt;= #{endDate}
        </where>
         order by r.review_status,r.id desc
        limit #{offset},#{pageSize};
         order by r.review_status,r.id desc limit #{offset},#{pageSize};
    </select>
    <select id="SelectReworkPageTotal" >
@@ -118,7 +117,7 @@
        values (
                   #{oddNumber}, #{rework.reportingWorkId},#{rework.processId},#{rework.orderId},#{rework.orderSort},#{rework.technologyNumber},#{rework.responsibleTeam},
                #{rework.responsiblePersonnel},#{rework.reworkType},#{rework.reworkReason},#{rework.reworkProcesses},#{rework.reworkNum},
                #{rework.reworkArea},#{rework.reworkTeam},#{rework.responsibleEquipment},#{rework.qualityInspector},"",0,now()
                #{rework.reworkArea},#{rework.reworkTeam},#{rework.responsibleEquipment},#{rework.qualityInspector},'',0,now()
               )
    </insert>
north-glass-erp/src/main/resources/mapper/sd/Delivery.xml
@@ -28,6 +28,10 @@
        <result column="quantity_available" property="finishedGoodsInventory.quantityAvailable"/>
    </resultMap>
    <delete id="deleteDelivery">
        delete from sd.delivery where delivery_id=#{deliveryId}
    </delete>
    <update id="updateDeliveryToExamine">
        update sd.delivery set delivery_state=#{deliveryState} where delivery_id=#{deliveryId}
    </update>
north-glass-erp/target/classes/mapper/mm/FinishedGoodsInventory.xml
@@ -162,7 +162,7 @@
                 left join sd.order_detail od on fgi.order_id = od.order_id and fgi.order_number = od.order_number
                 left join sd.`order` o on fgi.order_id = o.order_id
        <where>
                and fgi.quantity_available>0
                and fgi.status = 0 and fgi.quantity_available>0
            <if test="orderDetail.finishedGoodsInventory.orderId != null and orderDetail.finishedGoodsInventory.orderId != ''">
                and fgi.order_id regexp #{orderDetail.finishedGoodsInventory.orderId}
            </if>
north-glass-erp/target/classes/mapper/pp/ReworkMapper.xml
@@ -45,8 +45,7 @@
        <where>
            date(r.create_time)>=#{startDate} and date(r.create_time) &lt;= #{endDate}
        </where>
         order by r.review_status,r.id desc
        limit #{offset},#{pageSize};
         order by r.review_status,r.id desc limit #{offset},#{pageSize};
    </select>
    <select id="SelectReworkPageTotal" >
@@ -118,7 +117,7 @@
        values (
                   #{oddNumber}, #{rework.reportingWorkId},#{rework.processId},#{rework.orderId},#{rework.orderSort},#{rework.technologyNumber},#{rework.responsibleTeam},
                #{rework.responsiblePersonnel},#{rework.reworkType},#{rework.reworkReason},#{rework.reworkProcesses},#{rework.reworkNum},
                #{rework.reworkArea},#{rework.reworkTeam},#{rework.responsibleEquipment},#{rework.qualityInspector},"",0,now()
                #{rework.reworkArea},#{rework.reworkTeam},#{rework.responsibleEquipment},#{rework.qualityInspector},'',0,now()
               )
    </insert>
north-glass-erp/target/classes/mapper/sd/Delivery.xml
@@ -28,6 +28,10 @@
        <result column="quantity_available" property="finishedGoodsInventory.quantityAvailable"/>
    </resultMap>
    <delete id="deleteDelivery">
        delete from sd.delivery where delivery_id=#{deliveryId}
    </delete>
    <update id="updateDeliveryToExamine">
        update sd.delivery set delivery_state=#{deliveryState} where delivery_id=#{deliveryId}
    </update>