<!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="开工日期">
|
<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-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="单据号">
|
<el-input v-model="tableSearchParam.fbillno" placeholder="请输入单据号" style="width: 150px;"></el-input>
|
</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" :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="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="数量">
|
</el-table-column>
|
<el-table-column prop="ffetchdate" label="交货日期">
|
</el-table-column>
|
<el-table-column prop="memo" label="备注">
|
</el-table-column>
|
<el-table-column prop="soCode" 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 :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>
|
|
</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, 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)',
|
})
|
$.ajax({
|
url: "http://127.0.0.1:8133/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)',
|
})
|
$.ajax({
|
url: "http://127.0.0.1:8133/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:8133/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:8133/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:8133/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:8133/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(() => {
|
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,
|
|
}
|
}
|
});
|
|
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>
|