自动化立体仓库 - WMS系统
chen.lin
2026-01-27 ffeda1528cb303dee5f73e0a16ab4a21b2fcbe26
src/main/webapp/views/erpReceiving/erpReceiving.html
@@ -13,88 +13,99 @@
<body>
    <div id="app">
        <el-card>
        <el-form :inline="true">
            <el-form-item label="开工日期">
                <el-date-picker
                        v-model="tableSearchParam.fplancommitdate"
                        type="date"
                        placeholder="选择日期"
                        :default-value="defaultTime"
            <el-form :inline="true">
                <el-form-item label="开工日期">
                    <el-date-picker v-model="tableSearchParam.fplancommitdate" type="date" placeholder="选择日期"
                        :default-value="defaultTime" />
                </el-form-item>
                <el-form-item label="生产单号">
                    <el-input v-model="tableSearchParam.soCode" placeholder="请输入生产单号"></el-input>
                </el-form-item>
                <el-form-item label="车间">
                    <el-select v-model="tableSearchParam.depName" placeholder="选择车间" style="width: 240px">
                        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
                    </el-select>
                </el-form-item>
                <el-form-item label="">
                    <el-button type="primary" @click="page" circle>
                        <el-icon>
                            <Search />
                        </el-icon>
                    </el-button>
                </el-form-item>
            </el-form>
            <el-form :inline="true">
                <el-form-item label="">
                    <el-button type="primary" @click="tongbu">同步</el-button>
                </el-form-item>
                <el-form-item label="">
                    <el-button type="primary" @click="caneltongbu1">撤销同步</el-button>
                </el-form-item>
                <el-form-item label="">
                    <el-button type="primary" @click="tongbureturn">退料</el-button>
                </el-form-item>
                <el-form-item label="">
                    <el-button type="primary" @click="caneltongbureturn">撤销退料</el-button>
                </el-form-item>
                <el-form-item label="">
                    <el-button type="primary" @click="retongbu">重新同步</el-button>
                </el-form-item>
            </el-form>
            <el-table :data="tableData" border style="width: 100%" row-key="finterid"
                @selection-change="handleSelectionChange" max-height="650">
                <el-table-column type="selection">
                </el-table-column>
                <el-table-column type="index" width="50">
                </el-table-column>
                <el-table-column prop="soCode" label="生产单号">
                </el-table-column>
                <el-table-column prop="fbillno" label="任务单号">
                </el-table-column>
                <el-table-column prop="invCode" label="物料编码">
                </el-table-column>
                <el-table-column prop="invName" label="物料名称" width="300" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column prop="invStd" label="规格" width="200" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column prop="depName" label="车间">
                </el-table-column>
                <el-table-column prop="fauxqty" label="数量" width="90">
                </el-table-column>
                <el-table-column prop="fplancommitdate" label="计划开工时间">
                </el-table-column>
                <el-table-column prop="fplanfinishdate" label="计划完工时间">
                </el-table-column>
                <el-table-column prop="izSyncReceive" label="是否同步" width="90">
                </el-table-column>
                <el-table-column prop="izSyncReceiveReturn" label="是否退料" width="90">
                </el-table-column>
            </el-table>
            <!--            <div style="margin-top: 10px">-->
            <!--                <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"-->
            <!--                               :current-page="currentPage" :page-sizes="pageSizes" :page-size="pageSize"-->
            <!--                               layout="total, sizes, prev, pager, next, jumper" :total="pageTotal">-->
            <!--                </el-pagination>-->
            <!--            </div>-->
                />
            </el-form-item>
            <el-form-item label="生产单号">
            <el-input v-model="tableSearchParam.soCode" placeholder="请输入生产单号"></el-input>
         </el-form-item>
            <el-form-item label="车间">
                <el-select v-model="tableSearchParam.depName" placeholder="选择车间" style="width: 240px" >
                    <el-option
                            v-for="item in options"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value"
                    />
                </el-select>
            </el-form-item>
            <el-form-item label="">
                <el-button type="primary" @click="page" circle >
                    <el-icon><Search /></el-icon>
                </el-button>
            </el-form-item>
        </el-form>
        <el-form :inline="true">
            <el-form-item label="">
               <el-button type="primary" @click="tongbu" >同步</el-button>
            </el-form-item>
            <el-form-item label="">
               <el-button type="primary" @click="caneltongbu1">撤销同步</el-button>
            </el-form-item>
            <el-form-item label="">
               <el-button type="primary" @click="tongbureturn">退料</el-button>
            </el-form-item>
            <el-form-item label="">
               <el-button type="primary" @click="caneltongbureturn">撤销退料</el-button>
            </el-form-item>
        </el-form>
        <el-table :data="tableData" border style="width: 100%" row-key="finterid" @selection-change="handleSelectionChange" max-height="650">
            <el-table-column type="selection" >
            </el-table-column>
            <el-table-column type="index" width="50" >
            </el-table-column>
            <el-table-column prop="soCode" label="生产单号" >
            </el-table-column>
            <el-table-column prop="fbillno" label="任务单号">
            </el-table-column>
            <el-table-column prop="invCode" label="物料编码">
            </el-table-column>
            <el-table-column prop="invName" label="物料名称" width="300" show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="invStd" label="规格" width="200" show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="depName" label="车间">
            </el-table-column>
            <el-table-column prop="fauxqty" label="数量" width="90">
            </el-table-column>
            <el-table-column prop="fplancommitdate" label="计划开工时间">
            </el-table-column>
            <el-table-column prop="fplanfinishdate" label="计划完工时间">
            </el-table-column>
            <el-table-column prop="izSyncReceive" label="是否同步" width="90">
            </el-table-column>
            <el-table-column prop="izSyncReceiveReturn" label="是否退料" width="90">
            </el-table-column>
        </el-table>
<!--            <div style="margin-top: 10px">-->
<!--                <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"-->
<!--                               :current-page="currentPage" :page-sizes="pageSizes" :page-size="pageSize"-->
<!--                               layout="total, sizes, prev, pager, next, jumper" :total="pageTotal">-->
<!--                </el-pagination>-->
<!--            </div>-->
        </el-card>
        <!-- 重新同步数量输入弹窗 -->
        <el-dialog v-model="retongbuDialogVisible" title="重新同步" width="400px">
            <el-form :model="retongbuForm" label-width="100px">
                <el-form-item label="数量">
                    <el-input-number v-model="retongbuForm.fauxqty" :min="0" :precision="0" style="width: 100%"></el-input-number>
                </el-form-item>
            </el-form>
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="retongbuDialogVisible = false">取消</el-button>
                    <el-button type="primary" @click="submitRetongbu">提交</el-button>
                </span>
            </template>
        </el-dialog>
    </div>
    <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
    <script src="../../static/evn/vue.global.js"></script>
@@ -102,21 +113,21 @@
    <script src="../../static/evn/icons-vue.js"></script>
    <script type="module">
        // 导入中文语言包
        import zhCn from './zh-cn.js';
        import zhCn from '../../static/js/erp/zh-cn.js';
        const { createApp, ref, onMounted } = Vue;
        const app = createApp({
            setup() {
                const currentPage = ref(1)
                const pageSizes = ref([15,20, 30, 50, 100, 200])
                const pageSizes = ref([15, 20, 30, 50, 100, 200])
                const pageSize = ref(15)
                const pageTotal = ref(0)
                const tableSearchParam = ref({
                    soCode: null,
                    fplancommitdate: new Date(),
                    depName:null
                    depName: null
                })
                const tableData = ref([])
                const defaultTime = ref(new Date())
@@ -135,8 +146,12 @@
                ]
                const selectList = ref([])
                function page(){
                const retongbuDialogVisible = ref(false)
                const retongbuForm = ref({
                    fauxqty: 0
                })
                function page() {
                    let data = JSON.parse(JSON.stringify(tableSearchParam.value))
                    data.curr = currentPage.value
                    data.limit = pageSize.value
@@ -144,8 +159,13 @@
                        data.datetime = null
                        data.create_time = tableSearchParam.value.datetime[0] + " - " + tableSearchParam.value.datetime[1]
                    }
                    const loading = ElementPlus.ElLoading.service({
                        lock: true,
                        text: 'Loading',
                        background: 'rgba(0, 0, 0, 0.7)',
                    })
                    $.ajax({
                        url: "http://127.0.0.1:9090/mo/materialreceive/getList",
                        url: "http://127.0.0.1:8133/mo/materialreceive/getList",
                        headers: {
                            'token': localStorage.getItem('token')
                        },
@@ -153,10 +173,14 @@
                        dataType: 'json',
                        contentType: 'application/json;charset=UTF-8',
                        method: 'GET',
                        success: function(res) {
                        success: function (res) {
                            loading.close()
                            if (res.code == 200) {
                                tableData.value = res.data
                                ElementPlus.ElMessage({
                                    message: "拉取数据完成",
                                    type: 'success'
                                });
                            } else if (res.code === 403) {
                                top.location.href = baseUrl + "/";
                            } else {
@@ -169,14 +193,21 @@
                    });
                }
                function tongbu(){
                function tongbu() {
                    if (selectList.value.length === 0) {
                        ElementPlus.ElMessage({
                            message: "请先选择",
                            type: 'error'
                        });
                        return;
                    }
                    const loading = ElementPlus.ElLoading.service({
                        lock: true,
                        text: 'Loading',
                        background: 'rgba(0, 0, 0, 0.7)',
                    })
                    $.ajax({
                        url:"http://127.0.0.1:9090/mo/materialreceive/tongbu",
                        url: "http://127.0.0.1:8133/mo/materialreceive/tongbu",
                        headers: {
                            'token': localStorage.getItem('token')
                        },
@@ -184,13 +215,14 @@
                        dataType: 'json',
                        contentType: 'application/json;charset=UTF-8',
                        method: 'POST',
                        success: function(res) {
                        success: function (res) {
                            loading.close();
                            if (res.code == 200) {
                                ElementPlus.ElMessage({
                                    message: "同步完成",
                                    type: 'success'
                                });
                                page()
                            } else if (res.code === 403) {
                                top.location.href = baseUrl + "/";
                            } else {
@@ -203,14 +235,30 @@
                    });
                }
                function caneltongbu1(){
                function caneltongbu1() {
                    if (selectList.value.length === 0) {
                        ElementPlus.ElMessage({
                            message: "请先选择",
                            type: 'error'
                        });
                        return;
                    }
                    // 检查是否有已退料的记录
                    const hasReturned = selectList.value.some(item => item.izSyncReceiveReturn === '是');
                    if (hasReturned) {
                        ElementPlus.ElMessage({
                            message: "选中的数据中存在已退料的记录,不允许撤销同步",
                            type: 'error'
                        });
                        return;
                    }
                    const loading = ElementPlus.ElLoading.service({
                        lock: true,
                        text: 'Loading',
                        background: 'rgba(0, 0, 0, 0.7)',
                    })
                    $.ajax({
                        url: "http://127.0.0.1:9090/mo/materialreceive/caneltongbu1",
                        url: "http://127.0.0.1:8133/mo/materialreceive/caneltongbu1",
                        headers: {
                            'token': localStorage.getItem('token')
                        },
@@ -218,13 +266,14 @@
                        dataType: 'json',
                        contentType: 'application/json;charset=UTF-8',
                        method: 'POST',
                        success: function(res) {
                        success: function (res) {
                            loading.close();
                            if (res.code == 200) {
                                ElementPlus.ElMessage({
                                    message: "撤销同步完成",
                                    type: 'success'
                                });
                                page()
                            } else if (res.code === 403) {
                                top.location.href = baseUrl + "/";
                            } else {
@@ -237,14 +286,30 @@
                    });
                }
                function tongbureturn(){
                function tongbureturn() {
                    if (selectList.value.length === 0) {
                        ElementPlus.ElMessage({
                            message: "请先选择",
                            type: 'error'
                        });
                        return;
                    }
                    // 检查是否有已退料的记录
                    const hasReturned = selectList.value.some(item => item.izSyncReceive !== '是');
                    if (hasReturned) {
                        ElementPlus.ElMessage({
                            message: "选中的数据中存在未同步的记录,不允许生成退料",
                            type: 'error'
                        });
                        return;
                    }
                    const loading = ElementPlus.ElLoading.service({
                        lock: true,
                        text: 'Loading',
                        background: 'rgba(0, 0, 0, 0.7)',
                    })
                    $.ajax({
                        url: "http://127.0.0.1:9090/mo/materialreceive/tongbureturn",
                        url: "http://127.0.0.1:8133/mo/materialreceive/tongbureturn",
                        headers: {
                            'token': localStorage.getItem('token')
                        },
@@ -252,13 +317,14 @@
                        dataType: 'json',
                        contentType: 'application/json;charset=UTF-8',
                        method: 'POST',
                        success: function(res) {
                        success: function (res) {
                            loading.close();
                            if (res.code == 200) {
                                ElementPlus.ElMessage({
                                    message: "退料完成",
                                    type: 'success'
                                });
                                page()
                            } else if (res.code === 403) {
                                top.location.href = baseUrl + "/";
                            } else {
@@ -271,14 +337,21 @@
                    });
                }
                function caneltongbureturn(){
                function caneltongbureturn() {
                    if (selectList.value.length === 0) {
                        ElementPlus.ElMessage({
                            message: "请先选择",
                            type: 'error'
                        });
                        return;
                    }
                    const loading = ElementPlus.ElLoading.service({
                        lock: true,
                        text: 'Loading',
                        background: 'rgba(0, 0, 0, 0.7)',
                    })
                    $.ajax({
                        url: "http://127.0.0.1:9090/mo/materialreceive/caneltongbureturn",
                        url: "http://127.0.0.1:8133/mo/materialreceive/caneltongbureturn",
                        headers: {
                            'token': localStorage.getItem('token')
                        },
@@ -286,13 +359,14 @@
                        dataType: 'json',
                        contentType: 'application/json;charset=UTF-8',
                        method: 'POST',
                        success: function(res) {
                        success: function (res) {
                            loading.close();
                            if (res.code == 200) {
                                ElementPlus.ElMessage({
                                    message: "撤销退料完成",
                                    type: 'success'
                                });
                                page()
                            } else if (res.code === 403) {
                                top.location.href = baseUrl + "/";
                            } else {
@@ -304,18 +378,84 @@
                        }
                    });
                }
                function retongbu() {
                    if (selectList.value.length === 0) {
                        ElementPlus.ElMessage({
                            message: "请先选择",
                            type: 'error'
                        });
                        return;
                    }
                    // 默认数量为第一个选中项的当前数量
                    if (selectList.value.length > 0 && selectList.value[0].fauxqty) {
                        retongbuForm.value.fauxqty = selectList.value[0].fauxqty;
                    } else {
                        retongbuForm.value.fauxqty = 0;
                    }
                    retongbuDialogVisible.value = true;
                }
                function submitRetongbu() {
                    if (!retongbuForm.value.fauxqty || retongbuForm.value.fauxqty <= 0) {
                        ElementPlus.ElMessage({
                            message: "请输入有效的数量",
                            type: 'error'
                        });
                        return;
                    }
                    retongbuDialogVisible.value = false;
                    const loading = ElementPlus.ElLoading.service({
                        lock: true,
                        text: 'Loading',
                        background: 'rgba(0, 0, 0, 0.7)',
                    })
                    // 更新选中项的数量
                    const dataList = selectList.value.map(item => {
                        const newItem = JSON.parse(JSON.stringify(item));
                        newItem.fauxqty = retongbuForm.value.fauxqty;
                        return newItem;
                    });
                    $.ajax({
                        url: "http://127.0.0.1:8133/mo/materialreceive/retongbu",
                        headers: {
                            'token': localStorage.getItem('token')
                        },
                        data: JSON.stringify(dataList),
                        dataType: 'json',
                        contentType: 'application/json;charset=UTF-8',
                        method: 'POST',
                        success: function (res) {
                            loading.close();
                            if (res.code == 200) {
                                ElementPlus.ElMessage({
                                    message: "重新同步完成",
                                    type: 'success'
                                });
                                page()
                            } else if (res.code === 403) {
                                top.location.href = baseUrl + "/";
                            } else {
                                ElementPlus.ElMessage({
                                    message: res.msg,
                                    type: 'error'
                                });
                            }
                        }
                    });
                }
                function handleSizeChange(val) {
                    pageSize.value = val
                    currentPage.value = 1 // 重置到第一页
                    page()
                }
                function handleCurrentChange(val) {
                    currentPage.value = val
                    page()
                }
                function handleSelectionChange(val) {
                function handleSelectionChange(val) {
                    console.log(val)
                    selectList.value = val
                }
@@ -333,19 +473,23 @@
                    tableSearchParam,
                    defaultTime,
                    options,
                    retongbuDialogVisible,
                    retongbuForm,
                    page,
                    tongbu,
                    caneltongbu1,
                    tongbureturn,
                    caneltongbureturn,
                    retongbu,
                    submitRetongbu,
                    handleSizeChange,
                    handleCurrentChange,
                    handleSelectionChange
                }
            }
        });
        app.use(ElementPlus, {
            locale: zhCn.default || zhCn
        });