自动化立体仓库 - WMS系统
#
zhou zhou
2025-11-07 5f969cfa38009cb7444175c90fc354d5fe68593e
#
3个文件已添加
1个文件已修改
1404 ■■■■■ 已修改文件
src/main/webapp/views/erpBegindata/begindata.html 438 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/erpBegindata/confirmedBegindata.html 475 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/erpIcmo/icmo.html 487 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/erpWwreport/wwreport.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/erpBegindata/begindata.html
New file
@@ -0,0 +1,438 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/evn/index.css">
</head>
<body>
<div id="app">
    <el-card>
        <el-form :inline="true">
            <el-form-item label="开工日期">
                <el-date-picker
                        v-model="tableSearchParam.vouchDate"
                        type="date"
                        placeholder="选择日期"
                />
            </el-form-item>
            <el-form-item label="物料名称">
                <el-input v-model="tableSearchParam.invName" placeholder="请输入物料名称"></el-input>
            </el-form-item>
            <el-form-item label="供应商">
                <el-select v-model="tableSearchParam.venId" 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="search" circle >
                    <el-icon><Search /></el-icon>
                </el-button>
            </el-form-item>
        </el-form>
        <el-form :inline="true">
            <el-form-item label="">
                <el-upload
                        action="http://127.0.0.1:9090/basicinfo/begindata/readExcel"
                        :show-file-list="false"
                >
                    <el-button type="primary">导入</el-button>
                </el-upload>
            </el-form-item>
            <el-form-item label="">
                <el-button type="primary" @click="export1">导出</el-button>
            </el-form-item>
            <el-form-item label="">
                <el-button type="danger" @click="selectDelete">删除</el-button>
            </el-form-item>
        </el-form>
        <el-table :data="tableData" border style="width: 100%" row-key="id" @selection-change="handleSelectionChange" max-height="630" @cell-dblclick="dblclick">
            <el-table-column type="selection" >
            </el-table-column>
            <el-table-column type="index" width="50" >
            </el-table-column>
            <el-table-column prop="vouchDate" label="日期" >
            </el-table-column>
            <el-table-column prop="venCode" label="加工商编码"  width="100">
            </el-table-column>
            <el-table-column prop="venName" label="加工商名称" width="300" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="invCode" label="物料编码"  :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="invName" label="物料名称" width="200" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="invStd" label="物料规格">
            </el-table-column>
            <el-table-column prop="qty" 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>
                </el-form-item>
            </el-form>
            <el-form :model="formData" label-width="auto" style="max-width: 600px">
                <el-form-item label="日期" >
                    <el-input v-model="formData.vouchDate" disabled></el-input>
                </el-form-item>
                <el-form-item label="供应商编码" >
                    <el-input v-model="formData.venCode" disabled></el-input>
                </el-form-item>
                <el-form-item label="供应商名称" >
                    <el-input v-model="formData.venName" disabled></el-input>
                </el-form-item>
                <el-form-item label="物料代码" >
                    <el-input v-model="formData.invCode" disabled></el-input>
                </el-form-item>
                <el-form-item label="物料名称" >
                    <el-input v-model="formData.invName" disabled></el-input>
                </el-form-item>
                <el-form-item label="物料规格" >
                    <el-input v-model="formData.invStd" disabled></el-input>
                </el-form-item>
                <el-form-item label="期初数量" required>
                    <el-input v-model="formData.qty" type="number"></el-input>
                </el-form-item>
            </el-form>
            <template #footer>
                <div class="dialog-footer">
                    <el-button @click="dialogVisible = false">关闭</el-button>
                </div>
            </template>
        </el-dialog>
    </el-card>
</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>
<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 } = Vue;
    const app = createApp({
        setup() {
            const currentPage = ref(1)
            const pageSizes = ref([500,1000, 1500])
            const pageSize = ref(500)
            const pageTotal = ref(0)
            const tableSearchParam = ref({
                venId: null,
                vouchDate: null,
                invName:null
            })
            const tableData = ref([])
            const selectList = ref([])
            const options = ref([])
            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)',
                })
                $.ajax({
                    url: "http://127.0.0.1:9090/basicinfo/begindata/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)',
                        })
                        $.ajax({
                            url:"http://127.0.0.1:9090/basicinfo/begindata/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 save(){
                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/basicinfo/begindata/saveorupdate",
                            data: JSON.stringify(formData.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 export1(){
                let data = JSON.parse(JSON.stringify(tableSearchParam.value))
                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/basicinfo/begindata/export",
                            data: data,
                            contentType: 'application/json;charset=UTF-8',
                            method: 'GET',
                            xhrFields: {
                                responseType: 'blob' // 重要:指定响应类型
                            },
                            success: function(data, status, xhr) {
                                // 获取文件名
                                let fileName = '委外期初表.xls';
                                const contentDisposition = xhr.getResponseHeader('Content-Disposition');
                                if (contentDisposition) {
                                    const fileNameMatch = contentDisposition.match(/filename="?(.+)"?/);
                                    if (fileNameMatch && fileNameMatch[1]) {
                                        fileName = fileNameMatch[1];
                                    }
                                }
                                // 创建 Blob 对象并下载
                                const blob = new Blob([data], { type: 'application/vnd.ms-excel' });
                                const url = window.URL.createObjectURL(blob);
                                const link = document.createElement('a');
                                link.href = url;
                                link.download = fileName;
                                document.body.appendChild(link);
                                link.click();
                                document.body.removeChild(link);
                                window.URL.revokeObjectURL(url);
                                ElementPlus.ElMessage({
                                    message: "导出成功",
                                    type: 'success'
                                });
                            },
                            error: function(xhr, status, error) {
                                console.error('导出失败:', error);
                                ElementPlus.ElMessage({
                                    message: "导出失败",
                                    type: 'error'
                                });
                            },
                            complete: function (xhr, status){
                                loading.close()
                            }
                        });
                    })
                    .catch(() => {
                        // catch error
                    })
            }
            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 dblclick(val){
                formData.value = JSON.parse(JSON.stringify(val)) ;
                dialogVisible.value = true
            }
            function handleSizeChange(val) {
                pageSize.value = val
                currentPage.value = 1 // 重置到第一页
                page()
            }
            function handleCurrentChange(val) {
                currentPage.value = val
                page()
            }
            function handleSelectionChange(val) {
                selectList.value = val
            }
            onMounted(() => {
                page()
            })
            onBeforeMount(() => {
                getVendor()
            })
            return {
                tableData,
                currentPage,
                pageSizes,
                pageSize,
                pageTotal,
                tableSearchParam,
                options,
                dialogVisible,
                formData,
                search,
                page,
                save,
                export1,
                dblclick,
                selectDelete,
                handleSizeChange,
                handleCurrentChange,
                handleSelectionChange
            }
        }
    });
    app.use(ElementPlus, {
        locale: zhCn.default || zhCn
    });
    for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
        app.component(key, component)
    }
    app.mount('#app');
</script>
</body>
</html>
src/main/webapp/views/erpBegindata/confirmedBegindata.html
New file
@@ -0,0 +1,475 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/evn/index.css">
</head>
<body>
<div id="app">
    <el-card>
        <el-form :inline="true">
            <el-form-item label="开工日期">
                <el-date-picker
                        v-model="tableSearchParam.vouchDate"
                        type="date"
                        placeholder="选择日期"
                />
            </el-form-item>
            <el-form-item label="物料名称">
                <el-input v-model="tableSearchParam.invName" placeholder="请输入物料名称"></el-input>
            </el-form-item>
            <el-form-item label="供应商">
                <el-select v-model="tableSearchParam.venId" 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="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-item label="">
                <el-button type="primary" @click="tongbu">同步期初</el-button>
            </el-form-item>
        </el-form>
        <el-table :data="tableData" border style="width: 100%" row-key="id" @selection-change="handleSelectionChange" max-height="630" @cell-dblclick="dblclick">
            <el-table-column type="selection" >
            </el-table-column>
            <el-table-column type="index" width="50" >
            </el-table-column>
            <el-table-column prop="vouchDate" label="日期" >
            </el-table-column>
            <el-table-column prop="venCode" label="加工商编码" width="100">
            </el-table-column>
            <el-table-column prop="venName" label="加工商名称" width="300" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="invCode" label="物料编码"  :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="invName" label="物料名称" width="200" :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="invStd" label="物料规格">
            </el-table-column>
            <el-table-column prop="qty" 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>
                </el-form-item>
            </el-form>
            <el-form :model="formData" label-width="auto" style="max-width: 600px">
                <el-form-item label="日期" >
                    <el-input v-model="formData.vouchDate" disabled></el-input>
                </el-form-item>
                <el-form-item label="供应商编码" >
                    <el-input v-model="formData.venCode" disabled></el-input>
                </el-form-item>
                <el-form-item label="供应商名称" >
                    <el-input v-model="formData.venName" disabled></el-input>
                </el-form-item>
                <el-form-item label="物料代码" >
                    <el-input v-model="formData.invCode" disabled></el-input>
                </el-form-item>
                <el-form-item label="物料名称" >
                    <el-input v-model="formData.invName" disabled></el-input>
                </el-form-item>
                <el-form-item label="物料规格" >
                    <el-input v-model="formData.invStd" disabled></el-input>
                </el-form-item>
                <el-form-item label="期初数量" required>
                    <el-input v-model="formData.qty" type="number"></el-input>
                </el-form-item>
            </el-form>
            <template #footer>
                <div class="dialog-footer">
                    <el-button @click="dialogVisible = false">关闭</el-button>
                </div>
            </template>
        </el-dialog>
    </el-card>
</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>
<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 } = Vue;
    const app = createApp({
        setup() {
            const currentPage = ref(1)
            const pageSizes = ref([500,1000, 1500])
            const pageSize = ref(500)
            const pageTotal = ref(0)
            const tableSearchParam = ref({
                venId: null,
                vouchDate: null,
                invName:null
            })
            const tableData = ref([])
            const selectList = ref([])
            const options = ref([])
            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)',
                })
                $.ajax({
                    url: "http://127.0.0.1:9090/basicinfo/begindata/getList1",
                    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)',
                        })
                        $.ajax({
                            url:"http://127.0.0.1:9090/basicinfo/begindata/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 tongbu(){
                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/basicinfo/begindata/tongbu",
                            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()
                                loading.close();
                            }
                        });
                    })
            }
            function save(){
                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/basicinfo/begindata/saveorupdate",
                            data: JSON.stringify(formData.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 export1(){
                let data = JSON.parse(JSON.stringify(tableSearchParam.value))
                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/basicinfo/begindata/export",
                            data: data,
                            contentType: 'application/json;charset=UTF-8',
                            method: 'GET',
                            xhrFields: {
                                responseType: 'blob' // 重要:指定响应类型
                            },
                            success: function(data, status, xhr) {
                                // 获取文件名
                                let fileName = '委外期初表.xls';
                                const contentDisposition = xhr.getResponseHeader('Content-Disposition');
                                if (contentDisposition) {
                                    const fileNameMatch = contentDisposition.match(/filename="?(.+)"?/);
                                    if (fileNameMatch && fileNameMatch[1]) {
                                        fileName = fileNameMatch[1];
                                    }
                                }
                                // 创建 Blob 对象并下载
                                const blob = new Blob([data], { type: 'application/vnd.ms-excel' });
                                const url = window.URL.createObjectURL(blob);
                                const link = document.createElement('a');
                                link.href = url;
                                link.download = fileName;
                                document.body.appendChild(link);
                                link.click();
                                document.body.removeChild(link);
                                window.URL.revokeObjectURL(url);
                                ElementPlus.ElMessage({
                                    message: "导出成功",
                                    type: 'success'
                                });
                            },
                            error: function(xhr, status, error) {
                                console.error('导出失败:', error);
                                ElementPlus.ElMessage({
                                    message: "导出失败",
                                    type: 'error'
                                });
                            },
                            complete: function (xhr, status){
                                loading.close()
                            }
                        });
                    })
                    .catch(() => {
                        // catch error
                    })
            }
            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 dblclick(val){
                formData.value = JSON.parse(JSON.stringify(val)) ;
                dialogVisible.value = true
            }
            function handleSizeChange(val) {
                pageSize.value = val
                currentPage.value = 1 // 重置到第一页
                page()
            }
            function handleCurrentChange(val) {
                currentPage.value = val
                page()
            }
            function handleSelectionChange(val) {
                selectList.value = val
            }
            onMounted(() => {
                page()
            })
            onBeforeMount(() => {
                getVendor()
            })
            return {
                tableData,
                currentPage,
                pageSizes,
                pageSize,
                pageTotal,
                tableSearchParam,
                options,
                dialogVisible,
                formData,
                search,
                page,
                save,
                tongbu,
                export1,
                dblclick,
                selectDelete,
                handleSizeChange,
                handleCurrentChange,
                handleSelectionChange
            }
        }
    });
    app.use(ElementPlus, {
        locale: zhCn.default || zhCn
    });
    for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
        app.component(key, component)
    }
    app.mount('#app');
</script>
</body>
</html>
src/main/webapp/views/erpIcmo/icmo.html
New file
@@ -0,0 +1,487 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/evn/index.css">
</head>
<body>
<div id="app">
    <el-card>
        <el-form :inline="true">
            <el-form-item label="开工日期">
                <el-date-picker
                        v-model="tableSearchParam.fplancommitdate"
                        type="date"
                        placeholder="选择日期"
                />
            </el-form-item>
            <el-form-item label="单据号">
                <el-input v-model="tableSearchParam.fbillno" placeholder="请输入单据号"></el-input>
            </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-option>
                </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 :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="40" >
            </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="物料编码"  :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="invName" label="物料名称"   :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="invStd" label="物料规格"  :show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column prop="depName" label="车间">
            </el-table-column>
            <el-table-column prop="fqty" label="数量">
            </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="120">
            </el-table-column>
            <el-table-column prop="izSyncReceiveReturn" label="是否退料" width="120">
            </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>
                </el-form-item>
            </el-form>
            <el-form :model="formData" label-width="auto" style="max-width: 600px">
                <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.fcheckdate" disabled></el-input>
                </el-form-item>
                <el-form-item label="销售单号" >
                    <el-input v-model="formData.soCode" disabled></el-input>
                </el-form-item>
                <el-form-item label="物料代码" >
                    <el-input v-model="formData.invCode" disabled></el-input>
                </el-form-item>
                <el-form-item label="物料名称" >
                    <el-input v-model="formData.invName" disabled></el-input>
                </el-form-item>
                <el-form-item label="物料规格" >
                    <el-input v-model="formData.invStd" disabled></el-input>
                </el-form-item>
                <el-form-item label="数量" required>
                    <el-input v-model="formData.fqty" type="number"></el-input>
                </el-form-item>
                <el-form-item label="开工日期" required>
                    <el-date-picker
                            v-model="formData.fplancommitdate"
                            type="date"
                            placeholder="选择开工日期"
                    />
                </el-form-item>
                <el-form-item label="完工日期" required>
                    <el-date-picker
                            v-model="formData.fplanfinishdate"
                            type="date"
                            placeholder="选择完工日期"
                    />
                </el-form-item>
                <el-form-item label="车间" required>
                    <el-select v-model="formData.fworkshop" placeholder="选择车间" style="width: 240px" >
                        <el-option
                                v-for="item in depOptions"
                                :key="item.value"
                                :label="item.label"
                                :value="item.value"></el-option>
                    </el-select>
                </el-form-item>
            </el-form>
            <template #footer>
                <div class="dialog-footer">
                    <el-button @click="dialogVisible = false">关闭</el-button>
                </div>
            </template>
        </el-dialog>
    </el-card>
</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>
<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 } = 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({
                fplancommitdate: new Date(),
                fbillno: null,
                soCode:null,
                depName:null
            })
            console.log(tableSearchParam.value.fplancommitdate)
            const tableData = ref([])
            const selectList = ref([])
            const options = ref([
                {
                    value: '南区车间',
                    label: '南区车间'
                },
                {
                    value: '北区车间',
                    label: '北区车间'
                }
            ])
            const depOptions = ref([
            ])
            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)',
                })
                $.ajax({
                    url: "http://127.0.0.1:9090/mo/icmo/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)',
                        })
                        $.ajax({
                            url:"http://127.0.0.1:9090/mo/icmo/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);
                var year = d.getFullYear();
                var month = ('0' + (d.getMonth() + 1)).slice(-2);
                var day = ('0' + d.getDate()).slice(-2);
                var hours = ('0' + d.getHours()).slice(-2);
                var minutes = ('0' + d.getMinutes()).slice(-2);
                var seconds = ('0' + d.getSeconds()).slice(-2);
                return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
            }
            function save(){
                ElementPlus.ElMessageBox.confirm('确定保存吗?')
                    .then(() => {
                        const loading = ElementPlus.ElLoading.service({
                            lock: true,
                            text: 'Loading',
                            background: 'rgba(0, 0, 0, 0.7)',
                        })
                        const dataToSend = JSON.parse(JSON.stringify(formData.value));
                        dataToSend.fplancommitdate = formatLocalDate(dataToSend.fplancommitdate);
                        dataToSend.fplanfinishdate = formatLocalDate(dataToSend.fplanfinishdate);
                        $.ajax({
                            url:"http://127.0.0.1:9090/mo/icmo/saveorupdate",
                            data: JSON.stringify(dataToSend),
                            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 export1(){
                let data = JSON.parse(JSON.stringify(tableSearchParam.value))
                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/basicinfo/begindata/export",
                            data: data,
                            contentType: 'application/json;charset=UTF-8',
                            method: 'GET',
                            xhrFields: {
                                responseType: 'blob' // 重要:指定响应类型
                            },
                            success: function(data, status, xhr) {
                                // 获取文件名
                                let fileName = '委外期初表.xls';
                                const contentDisposition = xhr.getResponseHeader('Content-Disposition');
                                if (contentDisposition) {
                                    const fileNameMatch = contentDisposition.match(/filename="?(.+)"?/);
                                    if (fileNameMatch && fileNameMatch[1]) {
                                        fileName = fileNameMatch[1];
                                    }
                                }
                                // 创建 Blob 对象并下载
                                const blob = new Blob([data], { type: 'application/vnd.ms-excel' });
                                const url = window.URL.createObjectURL(blob);
                                const link = document.createElement('a');
                                link.href = url;
                                link.download = fileName;
                                document.body.appendChild(link);
                                link.click();
                                document.body.removeChild(link);
                                window.URL.revokeObjectURL(url);
                                ElementPlus.ElMessage({
                                    message: "导出成功",
                                    type: 'success'
                                });
                            },
                            error: function(xhr, status, error) {
                                console.error('导出失败:', error);
                                ElementPlus.ElMessage({
                                    message: "导出失败",
                                    type: 'error'
                                });
                            },
                            complete: function (xhr, status){
                                loading.close()
                            }
                        });
                    })
                    .catch(() => {
                        // catch error
                    })
            }
            function dblclick(val){
                formData.value = JSON.parse(JSON.stringify(val));
                dialogVisible.value = true
            }
            function handleSizeChange(val) {
                pageSize.value = val
                currentPage.value = 1 // 重置到第一页
                page()
            }
            function handleCurrentChange(val) {
                currentPage.value = val
                page()
            }
            function handleSelectionChange(val) {
                selectList.value = val
            }
            function getDepOptions(){
                $.ajax({
                    url: "http://127.0.0.1:9090/basicinfo/departmentl/getlistfordropdown",
                    contentType: 'application/json;charset=UTF-8',
                    method: 'GET',
                    success: function(res) {
                        if (res.code == 200) {
                            res.data.map(item => {
                                depOptions.value.push({
                                    value: item.depId, label: item.depName
                                })
                            })
                        } else {
                            ElementPlus.ElMessage({
                                message: res.msg,
                                type: 'error'
                            });
                        }
                    }
                });
            }
            onMounted(() => {
                page()
            })
            onBeforeMount(() => {
                getDepOptions()
            })
            return {
                tableData,
                currentPage,
                pageSizes,
                pageSize,
                pageTotal,
                tableSearchParam,
                options,
                depOptions,
                dialogVisible,
                formData,
                search,
                page,
                save,
                export1,
                dblclick,
                selectDelete,
                handleSizeChange,
                handleCurrentChange,
                handleSelectionChange
            }
        }
    });
    app.use(ElementPlus, {
        locale: zhCn.default || zhCn
    });
    for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
        app.component(key, component)
    }
    app.mount('#app');
</script>
</body>
</html>
src/main/webapp/views/erpWwreport/wwreport.html
@@ -247,7 +247,7 @@
            }
            function export1(){
                ElementPlus.ElMessageBox.confirm('确定打印吗?')
                ElementPlus.ElMessageBox.confirm('确定导出吗?')
                    .then(() => {
                        const loading = ElementPlus.ElLoading.service({
                            lock: true,
@@ -320,7 +320,7 @@
                    return ;
                }
                let data = JSON.parse(JSON.stringify(tableSearchParam.value))
                ElementPlus.ElMessageBox.confirm('确定打印吗?')
                ElementPlus.ElMessageBox.confirm('确定导出吗?')
                    .then(() => {
                        const loading = ElementPlus.ElLoading.service({
                            lock: true,