自动化立体仓库 - WMS系统
#
zhou zhou
2025-11-11 c9456c5f264a9da1df9963cc30f43659659ac9b3
#
2个文件已修改
1147 ■■■■ 已修改文件
src/main/webapp/views/erpOutstock/outstock.html 1047 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/erpPoinstock/poinstock.html 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/erpOutstock/outstock.html
@@ -11,566 +11,571 @@
</head>
<body>
<div id="app">
    <el-card>
        <el-form :inline="true">
            <el-form-item label="开工日期">
                <div>
                    <el-date-picker
                            v-model="tableSearchParam.dateStart"
                            type="date"
                            placeholder="开始日期"
                            style="width: 150px;"
                            :default-time="defaultTime"
                    />
                </div>
                <div style="margin-left: 5px;margin-right: 5px">
                    <span >-</span>
                </div>
                <div>
                    <el-date-picker
                            v-model="tableSearchParam.dateEnd"
                            type="date"
                            placeholder="结束日期"
                            style="width: 150px;"
                            :default-time="defaultTime"
                    />
                </div>
            </el-form-item>
            <el-form-item label="单据号">
                <el-input v-model="tableSearchParam.fbillno" placeholder="请输入单据号" style="width: 150px;"></el-input>
            </el-form-item>
            <el-form-item label="生产单号">
                <el-input v-model="tableSearchParam.fentryselfp0362" placeholder="请输入生产单号" style="width: 150px;"></el-input>
            </el-form-item>
            <el-form-item label="供应商">
                <el-select v-model="tableSearchParam.fsupplyid" placeholder="选择供应商" style="width: 150px" >
                    <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-select v-model="tableSearchParam.bizTypeName" placeholder="选择业务类型" style="width: 150px" >
                    <el-option
                            v-for="item in businessOptions"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value"
                    />
                </el-select>
            </el-form-item>
            <el-form-item label="状态">
                <el-select v-model="tableSearchParam.fstatus" placeholder="选择状态" style="width: 150px" >
                    <el-option
                            v-for="item in statusOptions"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value"
                    />
                </el-select>
            </el-form-item>
            <el-form-item label="生产部门">
                <el-select v-model="tableSearchParam.fheadselfp0339" placeholder="选择生产部门" style="width: 150px" >
                    <el-option
                            v-for="item in depOptions"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value"
                    />
                </el-select>
            </el-form-item>
            <el-form-item label="">
                <el-button type="primary" @click="search" circle >
                    <el-icon><Search /></el-icon>
                </el-button>
            </el-form-item>
        </el-form>
        <el-form :inline="true">
            <el-form-item label="">
                <el-button type="danger" @click="selectDelete">删除</el-button>
            </el-form-item>
        </el-form>
        <el-table size="small" :data="tableData" border style="width: 100%" @selection-change="handleSelectionChange" max-height="620" @cell-dblclick="dblclick">
            <el-table-column type="selection" >
            </el-table-column>
            <el-table-column type="index" width="55" >
            </el-table-column>
            <el-table-column prop="fbillno" label="单据编号" width="150" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="fdate" label="日期">
            </el-table-column>
            <el-table-column prop="venName" label="供应商" width="100" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="bizTypeName" label="业务类型" >
            </el-table-column>
            <el-table-column prop="invCode" label="物料编码" width="150" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="invName" label="物料名称" width="150" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="fqty" label="数量">
            </el-table-column>
            <el-table-column prop="inStockQty" label="立库入库量">
            </el-table-column>
            <el-table-column prop="forderbillno" label="订单单号">
            </el-table-column>
            <el-table-column prop="fentryselfp0362" label="生产单号">
            </el-table-column>
            <el-table-column prop="fheadselfp0339" label="生产部门">
            </el-table-column>
            <el-table-column prop="fheadselfp0338" label="交货日期">
            </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-dialog v-model="dialogVisible" fullscreen>
            <el-form :inline="true" label-width="auto">
                <el-form-item label="">
                    <el-button type="primary"  @click="save">保存</el-button>
    <div id="app">
        <el-card>
            <el-form :inline="true">
                <el-form-item label="开工日期">
                    <div>
                        <el-date-picker v-model="tableSearchParam.dateStart" type="date" placeholder="开始日期"
                            style="width: 150px;" :default-time="defaultTime" />
                    </div>
                    <div style="margin-left: 5px;margin-right: 5px">
                        <span>-</span>
                    </div>
                    <div>
                        <el-date-picker v-model="tableSearchParam.dateEnd" type="date" placeholder="结束日期"
                            style="width: 150px;" :default-time="defaultTime" />
                    </div>
                </el-form-item>
            </el-form>
            <el-form :inline="true" :model="formData" label-width="auto">
                <el-form-item label="单据号" >
                    <el-input v-model="formData.fbillno" disabled></el-input>
                </el-form-item>
                <el-form-item label="制单日期" >
                    <el-input v-model="formData.fdate" disabled></el-input>
                </el-form-item>
                <el-form-item label="业务类型" >
                    <el-input v-model="formData.bizTypeName" disabled></el-input>
                </el-form-item>
                <el-form-item label="供应商" required>
                    <el-select v-model="formData.fsupplyid" placeholder="选择车间" style="width: 240px" >
                        <el-option
                                v-for="item in options"
                                :key="item.value"
                                :label="item.label"
                                :value="item.value"></el-option>
                <el-form-item label="客户">
                    <el-select v-model="tableSearchParam.fcustid" placeholder="选择客户" style="width: 150px">
                        <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="交货日期" required>
                    <el-date-picker
                            v-model="formData.fheadselfp0338"
                            type="date"
                            placeholder="选择交货日期"
                    />
                <el-form-item label="单据号">
                    <el-input v-model="tableSearchParam.fbillno" placeholder="请输入单据号" style="width: 150px;"></el-input>
                </el-form-item>
                <el-form-item label="生产车间" >
                    <el-input v-model="formData.fheadselfp0339" disabled></el-input>
                </el-form-item>
            </el-form>
            <el-form :inline="true" label-width="auto">
                <el-form-item label="">
                    <el-button type="danger"  @click="selectDeleteDialog">删行</el-button>
                    <el-button type="primary" @click="search" circle>
                        <el-icon>
                            <Search />
                        </el-icon>
                    </el-button>
                </el-form-item>
            </el-form>
            <el-table :data="tableDataDialog" border style="width: 100%" row-key="id" @selection-change="handleSelectionChangeDialog" max-height="650">
                <el-table-column type="selection" >
            <el-form :inline="true">
                <el-form-item label="">
                    <el-button type="danger" @click="selectDelete">删除</el-button>
                </el-form-item>
            </el-form>
            <el-table size="small" :data="tableData" border style="width: 100%"
                @selection-change="handleSelectionChange" :height="tableHeight" @cell-dblclick="dblclick"
                ref="mainTable">
                <el-table-column type="selection">
                </el-table-column>
                <el-table-column type="index" width="50" >
                <el-table-column type="index" width="55">
                </el-table-column>
                <el-table-column prop="invCode" label="物料编码" >
                <el-table-column prop="fbillno" label="单据编号" width="150" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column prop="invName" label="物料名称">
                <el-table-column prop="fdate" label="日期">
                </el-table-column>
                <el-table-column prop="custName" label="客户" width="100" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column prop="fheadselfs0237" label="发货日期">
                </el-table-column>
                <el-table-column prop="invCode" label="物料编码" width="150" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column prop="invName" label="物料名称" width="150" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column prop="invStd" label="物料规格">
                </el-table-column>
                <el-table-column prop="fqty" label="数量">
                    <template #default="scope">
                        <el-input v-model="scope.row.fqty"></el-input>
                    </template>
                </el-table-column>
                <el-table-column prop="inStockQty" label="立库入库量">
                <el-table-column prop="ffetchdate" label="交货日期">
                </el-table-column>
                <el-table-column prop="forderbillno" label="订单单号">
                <el-table-column prop="memo" label="备注">
                </el-table-column>
                <el-table-column prop="fentryselfp0362" label="生产单号">
                <el-table-column prop="soCode" label="订单单号">
                </el-table-column>
            </el-table>
            <template #footer>
                <div class="dialog-footer" style="text-align: left;">
                    <el-button @click="dialogVisible = false">关闭</el-button>
                </div>
            </template>
        </el-dialog>
            <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>
</div>
            <el-dialog v-model="dialogVisible" fullscreen>
                <el-form :inline="true" label-width="auto">
                    <el-form-item label="">
                        <el-button type="primary" @click="save">保存</el-button>
                    </el-form-item>
                </el-form>
                <el-form :inline="true" :model="formData" label-width="auto">
                    <el-form-item label="单据号">
                        <el-input v-model="formData.fbillno" disabled></el-input>
                    </el-form-item>
                    <el-form-item label="制单日期">
                        <el-input v-model="formData.fdate" disabled></el-input>
                    </el-form-item>
                    <el-form-item label="客户">
                        <el-input v-model="formData.custName" disabled></el-input>
                    </el-form-item>
                    <el-form-item label="发货日期" required>
                        <el-date-picker v-model="formData.fheadselfs0237" type="date" placeholder="选择发货日期" />
                    </el-form-item>
                </el-form>
                <el-form :inline="true" label-width="auto">
                    <el-form-item label="">
                        <el-button type="danger" @click="selectDeleteDialog">删行</el-button>
                    </el-form-item>
                </el-form>
                <el-table :data="tableDataDialog" border style="width: 100%" row-key="id"
                    @selection-change="handleSelectionChangeDialog" 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="invCode" label="物料编码">
                    </el-table-column>
                    <el-table-column prop="invName" label="物料名称" width="150" :show-overflow-tooltip="true">
                    </el-table-column>
                    <el-table-column prop="invStd" label="物料规格">
                    </el-table-column>
                    <el-table-column prop="fqty" label="数量">
                        <template #default="scope">
                            <el-input v-model="scope.row.fqty"></el-input>
                        </template>
                    </el-table-column>
                    <el-table-column prop="inStockQty" label="备注">
                        <template #default="scope">
                            <el-input v-model="scope.row.memo"></el-input>
                        </template>
                    </el-table-column>
                    <el-table-column prop="forderbillno" label="交货日期">
                        <template #default="scope">
                            <el-date-picker v-model="scope.row.ffetchdate" type="date" placeholder="交货日期"
                                style="width: 150px;" :value-format="yyyy-MM-dd" />
                        </template>
                    </el-table-column>
                    <el-table-column prop="fentryselfp0362" label="订单单号">
                    </el-table-column>
                </el-table>
                <template #footer>
                    <div class="dialog-footer" style="text-align: left;">
                        <el-button @click="dialogVisible = false">关闭</el-button>
                    </div>
                </template>
            </el-dialog>
<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>
<script src="../../static/evn/element-plus.js"></script>
<script src="../../static/evn/icons-vue.js"></script>
<script type="module">
    // 导入中文语言包
    import zhCn from '../../static/js/erp/zh-cn.js';
        </el-card>
    </div>
    const { createApp, ref, onMounted,onBeforeMount } = Vue;
    <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>
    <script src="../../static/evn/element-plus.js"></script>
    <script src="../../static/evn/icons-vue.js"></script>
    <script type="module">
        // 导入中文语言包
        import zhCn from '../../static/js/erp/zh-cn.js';
        const { createApp, ref, onMounted, onBeforeMount, nextTick, onBeforeUnmount } = Vue;
    const app = createApp({
        setup() {
            const currentPage = ref(1)
            const pageSizes = ref([100,500,1000, 1500])
            const pageSize = ref(100)
            const pageTotal = ref(0)
            const tableSearchParam = ref({
                dateStart:null,
                dateEnd: null,
                // dateStart:new Date(),
                // dateEnd: new Date(),
                fbillno: null,
                fsupplyid:null,
                bizTypeName:null,
                fstatus:'0',
                fheadselfp0339:null,
                fentryselfp0362:null
            })
            const tableData = ref([])
            const tableDataDialog = ref([])
            const selectList = ref([])
            const selectListDialog = ref([])
            const options = ref([
            ])
            const depOptions = ref([
                {
                    value: '南区车间',
                    label: '南区车间'
                },
                {
                    value: '北区车间',
                    label: '北区车间'
                }
            ])
            const businessOptions = [
                {
                    value: '订单委外',
                    label: '订单委外'
                },
                {
                    value: '外购入库',
                    label: '外购入库'
                }
            ]
            const statusOptions = [
                {
                    value: '0',
                    label: '未审核',
                    check: true
                },
                {
                    value: '2',
                    label: '已审核未关闭'
                }
            ]
            const dialogVisible = ref(false)
            const formData = ref({})
            function search(){
                currentPage.value = 1
                page()
            }
            function page(){
                let data = JSON.parse(JSON.stringify(tableSearchParam.value))
                data.curr = currentPage.value
                data.limit = pageSize.value
                const loading = ElementPlus.ElLoading.service({
                    lock: true,
                    text: 'Loading',
                    background: 'rgba(0, 0, 0, 0.7)',
        const app = createApp({
            setup() {
                const currentPage = ref(1)
                const pageSizes = ref([100, 500, 1000, 1500])
                const pageSize = ref(100)
                const pageTotal = ref(0)
                const tableSearchParam = ref({
                    dateStart: null,
                    dateEnd: null,
                    // dateStart:new Date(),
                    // dateEnd: new Date(),
                    fbillno: null,
                    fsupplyid: null,
                    bizTypeName: null,
                    fstatus: '0',
                    fheadselfp0339: null,
                    fentryselfp0362: null
                })
                $.ajax({
                    url: "http://127.0.0.1:9090/mo/poinstock/getList",
                    headers: {
                        'token': localStorage.getItem('token')
                const tableData = ref([])
                const tableDataDialog = ref([])
                const selectList = ref([])
                const selectListDialog = ref([])
                const options = ref([
                ])
                const depOptions = ref([
                    {
                        value: '南区车间',
                        label: '南区车间'
                    },
                    data: data,
                    dataType: 'json',
                    contentType: 'application/json;charset=UTF-8',
                    method: 'GET',
                    success: function(res) {
                        if (res.code == 200) {
                            tableData.value = res.data.records
                            pageTotal.value = res.data.total
                        } else if (res.code === 403) {
                            top.location.href = baseUrl + "/";
                        } else {
                            ElementPlus.ElMessage({
                                message: res.msg,
                                type: 'error'
                            });
                        }
                    },
                    complete: function() {
                        loading.close()
                    {
                        value: '北区车间',
                        label: '北区车间'
                    }
                });
            }
            function selectDelete(){
                if (selectList.value.length === 0){
                    ElementPlus.ElMessage({
                        message: "请先选择",
                        type: 'error'
                    });
                    return ;
                }
                ElementPlus.ElMessageBox.confirm('确定删除吗?')
                    .then(() => {
                        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/poinstock/softDelete",
                            data: JSON.stringify(selectList.value),
                            dataType: 'json',
                            contentType: 'application/json;charset=UTF-8',
                            method: 'POST',
                            success: function(res) {
                                if (res.code == 200) {
                                    ElementPlus.ElMessage({
                                        message: "删除成功",
                                        type: 'success'
                                    });
                                } else if (res.code === 403) {
                                    top.location.href = baseUrl + "/";
                                } else {
                                    ElementPlus.ElMessage({
                                        message: res.msg,
                                        type: 'error'
                                    });
                                }
                            },
                            complete: function() {
                                page()
                                dialogVisible.value = false
                                loading.close();
                            }
                        });
                    })
            }
            function formatLocalDate(date) {
                if (!date) return '';
                var d = new Date(date);
                // 直接返回标准ISO 8601格式 (UTF-8兼容)
                return d.toISOString();
            }
            function save(){
                ElementPlus.ElMessageBox.confirm('确定保存吗?')
                    .then(() => {
                        const loading = ElementPlus.ElLoading.service({
                            lock: true,
                            text: 'Loading',
                            background: 'rgba(0, 0, 0, 0.7)',
                        })
                        const poInStockDTO = JSON.parse(JSON.stringify(formData.value));
                        const poInStockDTOS = JSON.parse(JSON.stringify(tableDataDialog.value));
                        poInStockDTO.fheadselfp0338 = formatLocalDate(poInStockDTO.fheadselfp0338);
                        $.ajax({
                            url:"http://127.0.0.1:9090/mo/poinstock/saveorupdate",
                            data: JSON.stringify({
                                poInStockDTO : poInStockDTO,
                                poInStockDTOS: poInStockDTOS
                            }),
                            dataType: 'json',
                            contentType: 'application/json;charset=UTF-8',
                            method: 'POST',
                            success: function(res) {
                                if (res.code == 200) {
                                    ElementPlus.ElMessage({
                                        message: "保存成功",
                                        type: 'success'
                                    });
                                } else if (res.code === 403) {
                                    top.location.href = baseUrl + "/";
                                } else {
                                    ElementPlus.ElMessage({
                                        message: res.msg,
                                        type: 'error'
                                    });
                                }
                            },
                            complete: function() {
                                page()
                                dialogVisible.value = false
                                loading.close();
                            }
                        });
                    })
            }
            function handleSelectionChangeDialog(val) {
                selectListDialog.value = val
                console.log(selectListDialog.value);
            }
            function dblclick(val){
                formData.value = JSON.parse(JSON.stringify(val));
                getListByID(formData.value);
                dialogVisible.value = true
            }
            function selectDeleteDialog(){
                if (selectListDialog.value.length === 0) {
                    ElementPlus.ElMessage({
                        message: '请选择要删除的行',
                        type: 'warning'
                    });
                    return;
                }
                //在selectListDialog中删除选中的行
                selectListDialog.value.forEach((item, index) => {
                    tableDataDialog.value.forEach((row, i) => {
                        if (row.id === item.id) {
                            tableDataDialog.value.splice(i, 1);
                        }
                    });
                });
            }
            function getListByID(row){
                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/poinstock/getbyid",
                    data: JSON.stringify(row),
                    dataType: 'json',
                    contentType: 'application/json;charset=UTF-8',
                    method: 'POST',
                    success: function(res) {
                        if (res.code == 200) {
                            tableDataDialog.value = res.data;
                        } else if (res.code === 403) {
                            top.location.href = baseUrl + "/";
                        } else {
                            ElementPlus.ElMessage({
                                message: res.msg,
                                type: 'error'
                            });
                        }
                ])
                const businessOptions = [
                    {
                        value: '订单委外',
                        label: '订单委外'
                    },
                    complete: function() {
                        loading.close();
                    {
                        value: '外购入库',
                        label: '外购入库'
                    }
                });
            }
                ]
            function handleSizeChange(val) {
                pageSize.value = val
                currentPage.value = 1 // 重置到第一页
                page()
            }
                const statusOptions = [
                    {
                        value: '0',
                        label: '未审核',
                        check: true
                    },
                    {
                        value: '2',
                        label: '已审核未关闭'
                    }
                ]
            function handleCurrentChange(val) {
                currentPage.value = val
                page()
            }
            function handleSelectionChange(val) {
                selectList.value = val
            }
                const dialogVisible = ref(false)
                const formData = ref({})
                function search() {
                    currentPage.value = 1
                    page()
                }
            function getVendor(){
                $.ajax({
                    url: "http://127.0.0.1:9090/basicinfo/vendor/getlistfordropdown",
                    contentType: 'application/json;charset=UTF-8',
                    method: 'GET',
                    success: function(res) {
                        if (res.code == 200) {
                            res.data.map(item => {
                                options.value.push({
                                    value: item.venId, label: item.venName
                                })
                function page() {
                    let data = JSON.parse(JSON.stringify(tableSearchParam.value))
                    data.curr = currentPage.value
                    data.limit = pageSize.value
                    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/outstock/getList",
                        headers: {
                            'token': localStorage.getItem('token')
                        },
                        data: data,
                        dataType: 'json',
                        contentType: 'application/json;charset=UTF-8',
                        method: 'GET',
                        success: function (res) {
                            if (res.code == 200) {
                                tableData.value = res.data.records
                                pageTotal.value = res.data.total
                            } else if (res.code === 403) {
                                top.location.href = baseUrl + "/";
                            } else {
                                ElementPlus.ElMessage({
                                    message: res.msg,
                                    type: 'error'
                                });
                            }
                        },
                        complete: function () {
                            loading.close()
                        }
                    });
                }
                function selectDelete() {
                    if (selectList.value.length === 0) {
                        ElementPlus.ElMessage({
                            message: "请先选择",
                            type: 'error'
                        });
                        return;
                    }
                    ElementPlus.ElMessageBox.confirm('确定删除吗?')
                        .then(() => {
                            const loading = ElementPlus.ElLoading.service({
                                lock: true,
                                text: 'Loading',
                                background: 'rgba(0, 0, 0, 0.7)',
                            })
                        } else {
                            ElementPlus.ElMessage({
                                message: res.msg,
                                type: 'error'
                            $.ajax({
                                url: "http://127.0.0.1:9090/mo/outstock/softDelete",
                                data: JSON.stringify(selectList.value),
                                dataType: 'json',
                                contentType: 'application/json;charset=UTF-8',
                                method: 'POST',
                                success: function (res) {
                                    if (res.code == 200) {
                                        ElementPlus.ElMessage({
                                            message: "删除成功",
                                            type: 'success'
                                        });
                                    } else if (res.code === 403) {
                                        top.location.href = baseUrl + "/";
                                    } else {
                                        ElementPlus.ElMessage({
                                            message: res.msg,
                                            type: 'error'
                                        });
                                    }
                                },
                                complete: function () {
                                    page()
                                    dialogVisible.value = false
                                    loading.close();
                                }
                            });
                        }
                        })
                }
                function formatLocalDate(date) {
                    if (!date) return '';
                    var d = new Date(date);
                    d.setHours(d.getHours() + 8);
                    // 直接返回标准ISO 8601格式 (UTF-8兼容)
                    return d.toISOString();
                }
                function save() {
                    if (!formData.value.fheadselfs0237) {
                        ElementPlus.ElMessage({
                            message: "请选择发货日期",
                            type: 'warning'
                        });
                        return;
                    }
                });
                    ElementPlus.ElMessageBox.confirm('确定保存吗?')
                        .then(() => {
                            const loading = ElementPlus.ElLoading.service({
                                lock: true,
                                text: 'Loading',
                                background: 'rgba(0, 0, 0, 0.7)',
                            })
                            const outstockDTO = JSON.parse(JSON.stringify(formData.value));
                            const outstockDTOS = JSON.parse(JSON.stringify(tableDataDialog.value));
                            outstockDTO.fheadselfs0237 = formatLocalDate(outstockDTO.fheadselfs0237);
                            outstockDTOS.forEach(item => {
                                item.ffetchdate = formatLocalDate(item.ffetchdate);
                            });
                            $.ajax({
                                url: "http://127.0.0.1:9090/mo/outstock/saveorupdate",
                                data: JSON.stringify({
                                    outStockDTO: outstockDTO,
                                    outStockDTOS: outstockDTOS
                                }),
                                dataType: 'json',
                                contentType: 'application/json;charset=UTF-8',
                                method: 'POST',
                                success: function (res) {
                                    if (res.code == 200) {
                                        ElementPlus.ElMessage({
                                            message: "保存成功",
                                            type: 'success'
                                        });
                                    } else if (res.code === 403) {
                                        top.location.href = baseUrl + "/";
                                    } else {
                                        ElementPlus.ElMessage({
                                            message: res.msg,
                                            type: 'error'
                                        });
                                    }
                                },
                                complete: function () {
                                    page()
                                    dialogVisible.value = false
                                    loading.close();
                                }
                            });
                        })
                }
                function handleSelectionChangeDialog(val) {
                    selectListDialog.value = val
                    console.log(selectListDialog.value);
                }
                function dblclick(val) {
                    formData.value = JSON.parse(JSON.stringify(val));
                    getListByID(formData.value);
                    dialogVisible.value = true
                }
                function selectDeleteDialog() {
                    if (selectListDialog.value.length === 0) {
                        ElementPlus.ElMessage({
                            message: '请选择要删除的行',
                            type: 'warning'
                        });
                        return;
                    }
                    //在selectListDialog中删除选中的行
                    selectListDialog.value.forEach((item, index) => {
                        tableDataDialog.value.forEach((row, i) => {
                            if (row.id === item.id) {
                                tableDataDialog.value.splice(i, 1);
                            }
                        });
                    });
                }
                function getListByID(row) {
                    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/outstock/getbyid",
                        data: JSON.stringify(row),
                        dataType: 'json',
                        contentType: 'application/json;charset=UTF-8',
                        method: 'POST',
                        success: function (res) {
                            if (res.code == 200) {
                                tableDataDialog.value = res.data;
                            } else if (res.code === 403) {
                                top.location.href = baseUrl + "/";
                            } else {
                                ElementPlus.ElMessage({
                                    message: res.msg,
                                    type: 'error'
                                });
                            }
                        },
                        complete: function () {
                            loading.close();
                        }
                    });
                }
                function handleSizeChange(val) {
                    pageSize.value = val
                    currentPage.value = 1 // 重置到第一页
                    page()
                }
                function handleCurrentChange(val) {
                    currentPage.value = val
                    page()
                }
                function handleSelectionChange(val) {
                    selectList.value = val
                }
                function getVendor() {
                    $.ajax({
                        url: "http://127.0.0.1:9090/basicinfo/vendor/getlistfordropdown",
                        contentType: 'application/json;charset=UTF-8',
                        method: 'GET',
                        success: function (res) {
                            if (res.code == 200) {
                                res.data.map(item => {
                                    options.value.push({
                                        value: item.venId, label: item.venName
                                    })
                                })
                            } else {
                                ElementPlus.ElMessage({
                                    message: res.msg,
                                    type: 'error'
                                });
                            }
                        }
                    });
                }
                function getCustomer() {
                    $.ajax({
                        url: "http://127.0.0.1:9090/basicinfo/customer/getlistfordropdown",
                        contentType: 'application/json;charset=UTF-8',
                        method: 'GET',
                        success: function (res) {
                            if (res.code == 200) {
                                res.data.map(item => {
                                    options.value.push({
                                        value: item.custId, label: item.custName
                                    })
                                })
                            } else {
                                ElementPlus.ElMessage({
                                    message: res.msg,
                                    type: 'error'
                                });
                            }
                        }
                    });
                }
                const tableHeight = ref(600)
                const mainTable = ref(null)
                const paginationRef = ref(null)
                function calcTableHeight() {
                    const tableEl = mainTable.value?.$el
                    if (!tableEl) return
                    const tableTop = tableEl.getBoundingClientRect().top
                    const paginationH = paginationRef.value ? paginationRef.value.offsetHeight : 0
                    const bottomPadding = 70 // 卡片底部内边距/外边距预留,可按需调整
                    const available = window.innerHeight - tableTop - paginationH - bottomPadding
                    // 给个最小值避免过小
                    tableHeight.value = Math.max(300, available)
                }
                onMounted(() => {
                    page()
                    nextTick(() => {
                        calcTableHeight()
                    })
                    window.addEventListener('resize', calcTableHeight)
                })
                onBeforeUnmount(() => {
                    window.removeEventListener('resize', calcTableHeight)
                })
                onBeforeMount(() => {
                    getVendor()
                    getCustomer()
                })
                return {
                    tableHeight,
                    mainTable,
                    paginationRef,
                    calcTableHeight,
                    tableData,
                    currentPage,
                    pageSizes,
                    pageSize,
                    pageTotal,
                    tableSearchParam,
                    options,
                    depOptions,
                    businessOptions,
                    statusOptions,
                    dialogVisible,
                    formData,
                    tableDataDialog,
                    selectListDialog,
                    search,
                    page,
                    save,
                    dblclick,
                    selectDelete,
                    handleSizeChange,
                    handleCurrentChange,
                    handleSelectionChange,
                    selectDeleteDialog,
                    handleSelectionChangeDialog,
                }
            }
        });
            onMounted(() => {
                page()
            })
            onBeforeMount(() => {
                getVendor()
            })
            return {
                tableData,
                currentPage,
                pageSizes,
                pageSize,
                pageTotal,
                tableSearchParam,
                options,
                depOptions,
                businessOptions,
                statusOptions,
                dialogVisible,
                formData,
                tableDataDialog,
                selectListDialog,
                search,
                page,
                save,
                dblclick,
                selectDelete,
                handleSizeChange,
                handleCurrentChange,
                handleSelectionChange,
                selectDeleteDialog,
                handleSelectionChangeDialog,
            }
        app.use(ElementPlus, {
            locale: zhCn.default || zhCn
        });
        for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
            app.component(key, component)
        }
    });
    app.use(ElementPlus, {
        locale: zhCn.default || zhCn
    });
    for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
        app.component(key, component)
    }
    app.mount('#app');
</script>
        app.mount('#app');
    </script>
</body>
src/main/webapp/views/erpPoinstock/poinstock.html
@@ -97,40 +97,42 @@
                <el-button type="danger" @click="selectClose">关闭</el-button>
            </el-form-item>
        </el-form>
        <el-table size="small" :data="tableData" border style="width: 100%" @selection-change="handleSelectionChange" max-height="600" @cell-dblclick="dblclick">
            <el-table-column type="selection" >
            </el-table-column>
            <el-table-column type="index" width="55" >
            </el-table-column>
            <el-table-column prop="fbillno" label="单据编号" width="150" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="fdate" label="日期">
            </el-table-column>
            <el-table-column prop="venName" label="供应商" width="100" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="bizTypeName" label="业务类型" >
            </el-table-column>
            <el-table-column prop="invCode" label="物料编码" width="150" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="invName" label="物料名称" width="150" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="fqty" label="数量">
            </el-table-column>
            <el-table-column prop="inStockQty" label="立库入库量">
            </el-table-column>
            <el-table-column prop="forderbillno" label="订单单号">
            </el-table-column>
            <el-table-column prop="fentryselfp0362" label="生产单号">
            </el-table-column>
            <el-table-column prop="fheadselfp0339" label="生产部门">
            </el-table-column>
            <el-table-column prop="fheadselfp0338" label="交货日期">
            </el-table-column>
        <!-- 修改 el-table:把固定 max-height 改为动态 height,并加上 ref -->
        <el-table
          size="small"
          :data="tableData"
          border
          style="width: 100%"
          @selection-change="handleSelectionChange"
          :height="tableHeight"
          @cell-dblclick="dblclick"
          ref="mainTable"
        >
            <el-table-column type="selection"></el-table-column>
            <el-table-column type="index" width="55"></el-table-column>
            <el-table-column prop="fbillno" label="单据编号" width="150" :show-overflow-tooltip="true"></el-table-column>
            <el-table-column prop="fdate" label="日期"></el-table-column>
            <el-table-column prop="venName" label="供应商" width="100" :show-overflow-tooltip="true"></el-table-column>
            <el-table-column prop="bizTypeName" label="业务类型"></el-table-column>
            <el-table-column prop="invCode" label="物料编码" width="150" :show-overflow-tooltip="true"></el-table-column>
            <el-table-column prop="invName" label="物料名称" width="150" :show-overflow-tooltip="true"></el-table-column>
            <el-table-column prop="fqty" label="数量"></el-table-column>
            <el-table-column prop="inStockQty" label="立库入库量"></el-table-column>
            <el-table-column prop="forderbillno" label="订单单号"></el-table-column>
            <el-table-column prop="fentryselfp0362" label="生产单号"></el-table-column>
            <el-table-column prop="fheadselfp0339" label="生产部门"></el-table-column>
            <el-table-column prop="fheadselfp0338" label="交货日期"></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">
        <div style="margin-top: 10px" ref="paginationRef">
            <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>
@@ -217,7 +219,7 @@
    // 导入中文语言包
    import zhCn from '../../static/js/erp/zh-cn.js';
    const { createApp, ref, onMounted,onBeforeMount } = Vue;
    const { createApp, ref, onMounted, onBeforeMount, nextTick, onBeforeUnmount } = Vue;
    const app = createApp({
@@ -248,6 +250,8 @@
            const options = ref([
            ])
            const depOptions = ref([
                {
@@ -283,7 +287,7 @@
            ]
            const dialogVisible = ref(false)
            const formData = ref({})
            const formData = ref({})
            function search(){
                currentPage.value = 1
@@ -571,12 +575,34 @@
                });
            }
            const tableHeight = ref(600)
            const mainTable = ref(null)
            const paginationRef = ref(null)
            function calcTableHeight() {
                const tableEl = mainTable.value?.$el
                if (!tableEl) return
                const tableTop = tableEl.getBoundingClientRect().top
                const paginationH = paginationRef.value ? paginationRef.value.offsetHeight : 0
                const bottomPadding = 40 // 卡片底部内边距/外边距预留,可按需调整
                const available = window.innerHeight - tableTop - paginationH - bottomPadding
                // 给个最小值避免过小
                tableHeight.value = Math.max(300, available)
            }
            onMounted(() => {
                page()
                nextTick(() => {
                    calcTableHeight()
                })
                window.addEventListener('resize', calcTableHeight)
            })
            onBeforeMount(() => {
                getVendor()
            })
            onBeforeUnmount(() => {
                window.removeEventListener('resize', calcTableHeight)
            })
            return {
@@ -594,6 +620,10 @@
                formData,
                tableDataDialog,
                selectListDialog,
                tableHeight,
                mainTable,
                paginationRef,
                calcTableHeight,
                search,
                page,
                save,