<!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-input v-model="tableSearchParam.order_code" placeholder="请输入生产单号"></el-input>
|
</el-form-item>
|
<el-form-item label="图号">
|
<el-input v-model="tableSearchParam.inv_code" placeholder="请输入图号"></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-button type="success" @click="exportData">导出</el-button>
|
</el-form-item>
|
</el-form>
|
|
<!-- 数据表格 -->
|
<el-table :data="tableData" border style="width: 100%" @selection-change="handleSelectionChange"
|
max-height="550" @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="orderCode" label="生产单号" width="100"
|
:show-overflow-tooltip="true"></el-table-column>
|
<el-table-column prop="personName" label="业务员" width="100"></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="orderQty" label="订单数量" width="100"></el-table-column>
|
<el-table-column prop="deliveryDate$" label="交货日期" width="160"></el-table-column>
|
<el-table-column prop="productQty" label="任务单数量" width="110"></el-table-column>
|
<el-table-column prop="inQty" label="成品数量" width="100"></el-table-column>
|
<el-table-column prop="icsbeqty" label="出货通知数" width="110"></el-table-column>
|
<el-table-column prop="seoseqty" label="实出数量" width="100"></el-table-column>
|
<el-table-column prop="outQty" label="对账数量" width="100"></el-table-column>
|
<el-table-column prop="outAmount" label="对账金额" width="100"></el-table-column>
|
<el-table-column prop="outPrice" label="对账单价" width="100"></el-table-column>
|
|
<el-table-column prop="temp1" label="包材版费" width="100"></el-table-column>
|
<el-table-column prop="temp2" label="退税资料" width="100"></el-table-column>
|
<el-table-column prop="temp3" label="开票" width="100"></el-table-column>
|
<el-table-column prop="temp4" label="内陆费" width="100"></el-table-column>
|
<el-table-column prop="temp5" label="收款" width="100"></el-table-column>
|
<el-table-column prop="temp8" label="应收款余额" width="100"></el-table-column>
|
<el-table-column prop="temp1Status" label="包材版费审核" width="120">
|
<template #default="scope">{{ formatStatus(scope.row.temp1Status) }}</template>
|
</el-table-column>
|
<el-table-column prop="temp2Status" label="退税资料审核" width="120">
|
<template #default="scope">{{ formatStatus(scope.row.temp2Status) }}</template>
|
</el-table-column>
|
<el-table-column prop="temp3Status" label="开票审核" width="100">
|
<template #default="scope">{{ formatStatus(scope.row.temp3Status) }}</template>
|
</el-table-column>
|
<el-table-column prop="temp4Status" label="内陆费审核" width="100">
|
<template #default="scope">{{ formatStatus(scope.row.temp4Status) }}</template>
|
</el-table-column>
|
<el-table-column prop="temp5Status" label="收款审核" width="100">
|
<template #default="scope">{{ formatStatus(scope.row.temp5Status) }}</template>
|
</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" title="编辑订单" width="900px" :close-on-click-modal="false">
|
<el-form :model="formData" label-width="120px">
|
<el-divider content-position="left">基本信息</el-divider>
|
<el-row :gutter="20">
|
<el-col :span="8">
|
<el-form-item label="ID">
|
<el-input v-model="formData.id" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="生产单号">
|
<el-input v-model="formData.orderCode" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="业务员">
|
<el-input v-model="formData.personName" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="8">
|
<el-form-item label="图号">
|
<el-input v-model="formData.invCode" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="图号">
|
<el-input v-model="formData.invName" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="规格">
|
<el-input v-model="formData.invStd" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="8">
|
<el-form-item label="订单数量">
|
<el-input v-model="formData.orderQty" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="交货日期">
|
<el-input v-model="formData.deliveryDate$" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="任务单数量">
|
<el-input v-model="formData.productQty" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="8">
|
<el-form-item label="成品数量">
|
<el-input v-model="formData.inQty" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="出货通知数">
|
<el-input v-model="formData.icsbeqty" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="实出数量">
|
<el-input v-model="formData.seoseqty" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="8">
|
<el-form-item label="对账数量">
|
<el-input v-model="formData.outQty" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="对账金额">
|
<el-input v-model="formData.outAmount" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="对账单价">
|
<el-input v-model="formData.outPrice" disabled></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
|
<el-divider content-position="left">管理信息</el-divider>
|
<el-row :gutter="20">
|
<el-col :span="8">
|
<el-form-item label="包材版费">
|
<el-input v-model="formData.temp1"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="退税资料">
|
<el-input v-model="formData.temp2"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="开票">
|
<el-input v-model="formData.temp3"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="8">
|
<el-form-item label="内陆费">
|
<el-input v-model="formData.temp4"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="收款">
|
<el-input v-model="formData.temp5"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="应收款余额">
|
<el-input v-model="formData.temp8"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="8">
|
<el-form-item label="预留项目1">
|
<el-input v-model="formData.temp6"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="预留项目2">
|
<el-input v-model="formData.temp7"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
|
<el-divider content-position="left">附件管理</el-divider>
|
<el-row :gutter="20">
|
<el-col :span="12" v-for="(item, index) in uploadFields" :key="index"
|
style="margin-bottom: 15px;">
|
<div style="display: flex; align-items: center; gap: 10px;">
|
<span style="width: 100px; font-weight: 500;">{{ item.label }}:</span>
|
<!-- 只有未上传或被拒绝时才显示上传按钮 -->
|
<el-upload v-if="!formData[item.field] || formData[item.statusField] === 2"
|
:action="uploadUrl" :headers="uploadHeaders"
|
:data="{id: formData.id, field: item.field}"
|
:on-success="(res) => handleUploadSuccess(res, item.field)"
|
:on-error="handleUploadError" :show-file-list="false"
|
style="display: inline-block;">
|
<el-button size="small" type="primary">上传</el-button>
|
</el-upload>
|
<!-- 审核通过显示下载按钮 -->
|
<el-button v-if="formData[item.field] && formData[item.statusField] === 1" size="small"
|
type="success" @click="downloadFile(formData[item.field])">下载</el-button>
|
<!-- 待审核状态提示 -->
|
<el-tag v-if="formData[item.field] && formData[item.statusField] === 0"
|
type="warning">待审核</el-tag>
|
<!-- 审核拒绝提示 -->
|
<el-tag v-if="formData[item.field] && formData[item.statusField] === 2"
|
type="danger">被拒绝,请重新上传</el-tag>
|
<!-- 未上传 -->
|
<el-tag v-if="!formData[item.field]" type="info">未上传</el-tag>
|
</div>
|
</el-col>
|
</el-row>
|
</el-form>
|
|
<template #footer>
|
<div class="dialog-footer">
|
<el-button @click="dialogVisible = false">关闭</el-button>
|
<el-button type="primary" @click="save">保存</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/evn/zh-cn.js';
|
|
const { createApp, ref, onMounted } = Vue;
|
|
const app = createApp({
|
setup() {
|
const currentPage = ref(1)
|
const pageSizes = ref([16, 50, 100, 200])
|
const pageSize = ref(16)
|
const pageTotal = ref(0)
|
const tableSearchParam = ref({
|
order_code: null,
|
inv_code: null
|
})
|
const tableData = ref([])
|
const selectList = ref([])
|
const dialogVisible = ref(false)
|
const formData = ref({})
|
|
const uploadUrl = baseUrl + '/saleOrder/uploadFile/auth'
|
const uploadHeaders = { 'token': localStorage.getItem('token') }
|
|
const uploadFields = ref([
|
{ label: '包材版费', field: 'temp1Path', statusField: 'temp1Status' },
|
{ label: '退税资料', field: 'temp2Path', statusField: 'temp2Status' },
|
{ label: '开票', field: 'temp3Path', statusField: 'temp3Status' },
|
{ label: '内陆费', field: 'temp4Path', statusField: 'temp4Status' },
|
{ label: '收款', field: 'temp5Path', statusField: 'temp5Status' }
|
])
|
|
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: baseUrl + "/saleOrder/list/auth",
|
headers: { 'token': localStorage.getItem('token') },
|
data: data,
|
dataType: 'json',
|
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: baseUrl + "/saleOrder/delete/auth",
|
headers: { 'token': localStorage.getItem('token') },
|
data: { param: JSON.stringify(selectList.value) },
|
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 exportData() {
|
let url = baseUrl + "/saleOrder/exportExcel/auth?";
|
if (tableSearchParam.value.order_code) {
|
url += "order_code=" + encodeURIComponent(tableSearchParam.value.order_code) + "&";
|
}
|
if (tableSearchParam.value.inv_name) {
|
url += "inv_name=" + encodeURIComponent(tableSearchParam.value.inv_name) + "&";
|
}
|
location.href = url;
|
}
|
|
function dblclick(row) {
|
formData.value = JSON.parse(JSON.stringify(row));
|
dialogVisible.value = true
|
}
|
|
function save() {
|
ElementPlus.ElMessageBox.confirm('确定保存吗?')
|
.then(() => {
|
const loading = ElementPlus.ElLoading.service({
|
lock: true,
|
text: 'Loading',
|
background: 'rgba(0, 0, 0, 0.7)',
|
})
|
// 只提交需要更新的字段
|
const updateData = {
|
id: formData.value.id,
|
temp1: formData.value.temp1,
|
temp2: formData.value.temp2,
|
temp3: formData.value.temp3,
|
temp4: formData.value.temp4,
|
temp5: formData.value.temp5,
|
temp6: formData.value.temp6,
|
temp7: formData.value.temp7,
|
temp8: formData.value.temp8,
|
temp1Path: formData.value.temp1Path,
|
temp2Path: formData.value.temp2Path,
|
temp3Path: formData.value.temp3Path,
|
temp4Path: formData.value.temp4Path,
|
temp5Path: formData.value.temp5Path,
|
temp1Status: formData.value.temp1Status,
|
temp2Status: formData.value.temp2Status,
|
temp3Status: formData.value.temp3Status,
|
temp4Status: formData.value.temp4Status,
|
temp5Status: formData.value.temp5Status
|
}
|
$.ajax({
|
url: baseUrl + "/saleOrder/update/auth",
|
headers: { 'token': localStorage.getItem('token') },
|
data: updateData,
|
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 handleUploadSuccess(res, field) {
|
if (res.code === 200) {
|
formData.value[field] = res.data
|
page()
|
ElementPlus.ElMessage({ message: '上传成功', type: 'success' });
|
} else {
|
ElementPlus.ElMessage({ message: res.msg || '上传失败', type: 'error' });
|
}
|
}
|
|
function handleUploadError() {
|
ElementPlus.ElMessage({ message: '上传失败', type: 'error' });
|
}
|
|
function handleSizeChange(val) {
|
pageSize.value = val
|
currentPage.value = 1
|
page()
|
}
|
|
function handleCurrentChange(val) {
|
currentPage.value = val
|
page()
|
}
|
|
function handleSelectionChange(val) {
|
selectList.value = val
|
}
|
|
function downloadFile(filePath) {
|
if (!filePath) return;
|
// 调用后端下载接口
|
const downloadUrl = baseUrl + '/saleOrder/downloadFile/auth?filePath=' + encodeURIComponent(filePath);
|
window.open(downloadUrl, '_blank');
|
}
|
|
function formatStatus(status) {
|
const statusMap = {
|
0: '待审核',
|
1: '已通过',
|
2: '已拒绝'
|
};
|
return statusMap[status] || '';
|
}
|
|
onMounted(() => {
|
page()
|
})
|
|
return {
|
tableData,
|
currentPage,
|
pageSizes,
|
pageSize,
|
pageTotal,
|
tableSearchParam,
|
dialogVisible,
|
formData,
|
uploadUrl,
|
uploadHeaders,
|
uploadFields,
|
search,
|
page,
|
save,
|
exportData,
|
dblclick,
|
selectDelete,
|
handleSizeChange,
|
handleCurrentChange,
|
handleSelectionChange,
|
handleUploadSuccess,
|
handleUploadError,
|
downloadFile,
|
formatStatus
|
}
|
}
|
});
|
|
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>
|