<script setup>  
 | 
import { ref, computed, reactive } from 'vue';  
 | 
import { useRouter } from "vue-router";  
 | 
import { get, post, postBlob } from '@/utils/request.js'  
 | 
import { message, Modal } from 'ant-design-vue';  
 | 
import { logout } from '@/config.js';  
 | 
import { formatMessage } from '@/utils/localeUtils.js';  
 | 
import useTableSearch from '@/utils/tableUtils.jsx';  
 | 
import OrderOutBatchPreviewView from '@/components/orderOut/orderOutBatchPreview/index.vue';  
 | 
import OrderOutMergePreviewView from '@/components/orderOut/orderOutMergePreview/index.vue';  
 | 
  
 | 
const router = useRouter();  
 | 
  
 | 
const emit = defineEmits(['pageReload'])  
 | 
  
 | 
const TABLE_KEY = 'table-order-detl';  
 | 
let currentPage = 1;  
 | 
let pageSize = 10;  
 | 
  
 | 
const {  
 | 
    getColumnSearchProps,  
 | 
    handleResizeColumn,  
 | 
} = useTableSearch();  
 | 
  
 | 
let currentOrder = ref(null);  
 | 
let searchInput = ref(null);  
 | 
let tableData = ref([]);  
 | 
const orderOutBatchPreviewChild = ref(null);  
 | 
const orderOutMergePreviewChild = ref(null);  
 | 
const checkedOrderKeys = ref([]);  
 | 
getPage();  
 | 
  
 | 
const columns = [  
 | 
    {  
 | 
        title: formatMessage('db.man_order_detl.order_no', '订单编号'),  
 | 
        dataIndex: 'orderNo',  
 | 
        width: 140,  
 | 
        ellipsis: true,  
 | 
        ...getColumnSearchProps('orderNo'),  
 | 
    },  
 | 
    {  
 | 
        title: formatMessage('db.man_order_detl.anfme', '数量'),  
 | 
        dataIndex: 'anfme',  
 | 
        width: 140,  
 | 
        ellipsis: true,  
 | 
        ...getColumnSearchProps('anfme'),  
 | 
    },  
 | 
    {  
 | 
        title: formatMessage('db.man_order_detl.qty', '已完成数量'),  
 | 
        dataIndex: 'qty',  
 | 
        width: 140,  
 | 
        ellipsis: true,  
 | 
        ...getColumnSearchProps('qty'),  
 | 
    },  
 | 
    {  
 | 
        title: formatMessage('db.man_order_detl.work_qty', '作业中数量'),  
 | 
        dataIndex: 'workQty',  
 | 
        width: 140,  
 | 
        ellipsis: true,  
 | 
        ...getColumnSearchProps('workQty'),  
 | 
    },  
 | 
    {  
 | 
        title: formatMessage('db.man_order_detl.matnr', '商品编号'),  
 | 
        dataIndex: ['mat$', 'matnr'],  
 | 
        width: 140,  
 | 
        ellipsis: true,  
 | 
        ...getColumnSearchProps('matId$'),  
 | 
    },  
 | 
    {  
 | 
        title: formatMessage('db.man_order_detl.batch', '批号'),  
 | 
        dataIndex: 'batch',  
 | 
        width: 140,  
 | 
        ellipsis: true,  
 | 
        ...getColumnSearchProps('batch'),  
 | 
    },  
 | 
  
 | 
    // {  
 | 
    //     title: formatMessage('common.operation', '操作'),  
 | 
    //     name: 'oper',  
 | 
    //     dataIndex: 'oper',  
 | 
    //     key: 'oper',  
 | 
    //     width: 140,  
 | 
    // },  
 | 
];  
 | 
  
 | 
const state = reactive({  
 | 
    selectedRowKeys: [],  
 | 
    loading: false,  
 | 
});  
 | 
const onSelectChange = selectedRowKeys => {  
 | 
    // console.log('selectedRowKeys changed: ', selectedRowKeys);  
 | 
    state.selectedRowKeys = selectedRowKeys;  
 | 
};  
 | 
  
 | 
function getPage() {  
 | 
    if (currentOrder.value != null) {  
 | 
        get('/api/orderDetl/orderId/' + currentOrder.value.id, {}).then((resp) => {  
 | 
            let result = resp.data;  
 | 
            if (result.code == 200) {  
 | 
                let data = result.data;  
 | 
                tableData.value = data;  
 | 
            } else if (result.code === 401) {  
 | 
                message.error(result.msg);  
 | 
                logout()  
 | 
            } else {  
 | 
                message.error(result.msg);  
 | 
            }  
 | 
        })  
 | 
    }  
 | 
}  
 | 
  
 | 
function handleTableReload(value) {  
 | 
    getPage()  
 | 
}  
 | 
  
 | 
let orderData = ref([]);  
 | 
let searchOrder = ref("");  
 | 
getOrderData()  
 | 
function getOrderData() {  
 | 
    post('/api/order/out/page', {  
 | 
        current: currentPage,  
 | 
        pageSize: pageSize,  
 | 
        condition: searchOrder.value,  
 | 
        orderOut: true,  
 | 
    }).then((resp) => {  
 | 
        let result = resp.data;  
 | 
        if (result.code == 200) {  
 | 
            let data = result.data.records;  
 | 
            orderData.value = data  
 | 
        } else if (result.code === 401) {  
 | 
            message.error(result.msg);  
 | 
            logout()  
 | 
        } else {  
 | 
            message.error(result.msg);  
 | 
        }  
 | 
    })  
 | 
}  
 | 
  
 | 
const handleOrderSelected = (selectedKeys, e) => {  
 | 
    currentOrder.value = e.selectedNodes[0];  
 | 
    getPage()  
 | 
}  
 | 
  
 | 
const handleSearchOrder = (e) => {  
 | 
    getOrderData()  
 | 
}  
 | 
  
 | 
const handleBatchOrderOut = () => {  
 | 
    let data = state.selectedRowKeys;  
 | 
    handleOrderOutPreview(data)  
 | 
}  
 | 
  
 | 
const handleOrderOutPreview = (data) => {  
 | 
    if (data.length == 0) {  
 | 
        message.error(formatMessage("page.orderOut.batchOrderOut.error", "请选择至少一条出库明细"));  
 | 
        return;  
 | 
    }  
 | 
  
 | 
    orderOutBatchPreviewChild.value.open = true;  
 | 
    orderOutBatchPreviewChild.value.records = data;  
 | 
}  
 | 
  
 | 
const handleMergeOrderOut = () => {  
 | 
    let orderIdList = [];  
 | 
    checkedOrderKeys.value.forEach((idx) => {  
 | 
        let index = parseInt(idx.split("-")[1]);  
 | 
        orderIdList.push(orderData.value[index].id)  
 | 
    })  
 | 
  
 | 
    if (orderIdList.length == 0) {  
 | 
        message.error(formatMessage("page.orderOut.mergeOrderOut.error", "请选择至少一条订单"));  
 | 
        return;  
 | 
    }  
 | 
  
 | 
    orderOutMergePreviewChild.value.open = true;  
 | 
    orderOutMergePreviewChild.value.records = orderIdList;  
 | 
}  
 | 
  
 | 
const handleChildReload = () => {  
 | 
    handleTableReload()  
 | 
}  
 | 
  
 | 
const handleGenerateWave = () => {  
 | 
    let orderIdList = [];  
 | 
    checkedOrderKeys.value.forEach((idx) => {  
 | 
        let index = parseInt(idx.split("-")[1]);  
 | 
        orderIdList.push(orderData.value[index].id)  
 | 
    })  
 | 
  
 | 
    if (orderIdList.length == 0) {  
 | 
        message.error(formatMessage("page.orderOut.mergeOrderOut.error", "请选择至少一条订单"));  
 | 
        return;  
 | 
    }  
 | 
  
 | 
    post('/api/out/wave/generate', orderIdList).then((resp) => {  
 | 
        let result = resp.data;  
 | 
        if (result.code == 200) {  
 | 
            message.success(formatMessage('page.add.success', '成功'));  
 | 
            emit('pageReload', 'reload')  
 | 
        } else {  
 | 
            message.error(result.msg);  
 | 
        }  
 | 
    })  
 | 
}  
 | 
  
 | 
</script>  
 | 
  
 | 
<script>  
 | 
export default {  
 | 
    name: '订单出库'  
 | 
}  
 | 
</script>  
 | 
  
 | 
<template>  
 | 
    <div style="display: flex;">  
 | 
        <a-card :title="formatMessage('common.order', '订单')" style="flex: 4;margin-right: 30px;">  
 | 
            <div style="margin-bottom: 10px;display: flex;">  
 | 
                <!-- <div style="margin-right: 10px;">  
 | 
                    <a-button @click="handleMergeOrderOut()">  
 | 
                        {{ formatMessage('common.orderOut', '合并订单') }}  
 | 
                    </a-button>  
 | 
                </div> -->  
 | 
                <div style="margin-right: 10px;">  
 | 
                    <a-button @click="handleGenerateWave()">  
 | 
                        {{ formatMessage('common.generateWave', '生成波次') }}  
 | 
                    </a-button>  
 | 
                </div>  
 | 
            </div>  
 | 
            <a-input v-model:value="searchOrder" @change="handleSearchOrder"  
 | 
                :placeholder="formatMessage('page.input', '请输入')" style="margin-bottom: 8px" />  
 | 
            <a-tree @select="handleOrderSelected" :tree-data="orderData" v-model:checkedKeys="checkedOrderKeys"  
 | 
                checkable blockNode>  
 | 
                <template #title="{ orderNo, createTime$ }">  
 | 
                    <div style="display: flex;justify-content: space-between">  
 | 
                        <div>{{ orderNo }}</div>  
 | 
                        <div>{{ createTime$ }}</div>  
 | 
                    </div>  
 | 
                </template>  
 | 
            </a-tree>  
 | 
        </a-card>  
 | 
  
 | 
        <a-card style="flex: 10;">  
 | 
            <div class="table-header">  
 | 
                <!-- <a-button size="small" @click="handleBatchOrderOut()">  
 | 
                    {{ formatMessage('common.orderOut', '批量出库') }}  
 | 
                </a-button> -->  
 | 
            </div>  
 | 
            <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }"  
 | 
                :data-source="tableData" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id"  
 | 
                :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns">  
 | 
                <template #bodyCell="{ column, text, record }">  
 | 
                    <template v-if="column.dataIndex === 'oper'">  
 | 
                        <div style="display: flex;justify-content: space-evenly;">  
 | 
                            <a-button size="small" @click="handleOrderOutPreview([record.id])">  
 | 
                                {{ formatMessage('common.orderOut', '出库') }}  
 | 
                            </a-button>  
 | 
                        </div>  
 | 
                    </template>  
 | 
                </template>  
 | 
            </a-table>  
 | 
        </a-card>  
 | 
  
 | 
        <OrderOutBatchPreviewView ref="orderOutBatchPreviewChild" @reload="handleChildReload" />  
 | 
        <OrderOutMergePreviewView ref="orderOutMergePreviewChild" @reload="handleChildReload" />  
 | 
    </div>  
 | 
</template>  
 | 
  
 | 
<style></style>  
 |