This commit is contained in:
2025-07-25 17:00:14 +08:00
parent aab2bc1074
commit 03563a0384
3 changed files with 515 additions and 558 deletions

BIN
vue/dist.zip Normal file

Binary file not shown.

View File

@@ -1,33 +1,32 @@
<template> <template>
<div> <div>
<div class="app-container"> <div class="app-container">
<div div style="font-size:25px;text-align:left ; position:relative;"> <div div style="font-size: 25px; text-align: left; position: relative">
<el-button v-if="view" type="primary" @click="saveData('false')"> <el-button v-if="view" type="primary" @click="saveData('false')">
{{ '保存' }} {{ "保存" }}
</el-button> </el-button>
<el-button v-if="view" type="primary" @click="saveData('true')"> <el-button v-if="view" type="primary" @click="saveData('true')">
{{ '提交' }} {{ "提交" }}
</el-button> </el-button>
<!-- 附件上传按钮 --> <!-- 附件上传按钮 -->
<el-button type="primary" @click="openUploadDialog">上传附件</el-button> <el-button type="primary" @click="openUploadDialog">上传附件</el-button>
</div> </div>
</div> </div>
<el-divider></el-divider> <el-divider></el-divider>
<el-form ref="ContractSalaryForm" :rules="rules" :model="ruleFrom" :label-position="labelPosition" label-width="auto" <el-form ref="ContractSalaryForm" :rules="rules" :model="ruleFrom" :label-position="labelPosition" label-width="auto" style="width: 100%" :disabled="!view">
style="width: 100%" :disabled="!view">
<!-- 基础信息 --> <!-- 基础信息 -->
<div class="form-dataForm"> <div class="form-dataForm">
<el-row>基本信息</el-row> <el-row>基本信息</el-row>
</div> </div>
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='报价单号' prop="FBILLNO"> <el-form-item label="报价单号" prop="FBILLNO">
<el-input v-model="ruleFrom.FBILLNO" readonly></el-input> <el-input v-model="ruleFrom.FBILLNO" readonly></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='询价名称' prop="FProjectName"> <el-form-item label="询价名称" prop="FProjectName">
<el-input v-model="ruleFrom.FProjectName" readonly></el-input> <el-input v-model="ruleFrom.FProjectName" readonly></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -55,43 +54,39 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="开标日期" prop="FOpenDate"> <el-form-item label="开标日期" prop="FOpenDate">
<el-date-picker style="width: 100%" v-model="ruleFrom.FOpenDate" type="date" format="yyyy年MM月dd日 HH时mm分ss秒" <el-date-picker style="width: 100%" v-model="ruleFrom.FOpenDate" type="date" format="yyyy年MM月dd日 HH时mm分ss秒" value-format="yyyy-MM-dd HH:mm:ss" readonly> </el-date-picker>
value-format="yyyy-MM-dd HH:mm:ss" readonly>
</el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='报价状态' prop="FPriceStatus"> <el-form-item label="报价状态" prop="FPriceStatus">
<el-input v-model="ruleFrom.FPriceStatus" readonly></el-input> <el-input v-model="ruleFrom.FPriceStatus" readonly></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='报价日期' prop="FQuoteDate"> <el-form-item label="报价日期" prop="FQuoteDate">
<el-date-picker style="width: 100%" v-model="ruleFrom.FQuoteDate" type="date" format="yyyy年MM月dd日 HH时mm分ss秒" <el-date-picker style="width: 100%" v-model="ruleFrom.FQuoteDate" type="date" format="yyyy年MM月dd日 HH时mm分ss秒" value-format="yyyy-MM-dd HH:mm:ss" readonly>
value-format="yyyy-MM-dd HH:mm:ss" readonly>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="报价截至日期" prop="FExpiryDate"> <el-form-item label="报价截至日期" prop="FExpiryDate">
<el-date-picker style="width: 100%" v-model="ruleFrom.FExpiryDate" type="date" format="yyyy年MM月dd日 HH时mm分ss秒" <el-date-picker style="width: 100%" v-model="ruleFrom.FExpiryDate" type="date" format="yyyy年MM月dd日 HH时mm分ss秒" value-format="yyyy-MM-dd HH:mm:ss" readonly>
value-format="yyyy-MM-dd HH:mm:ss" readonly>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='联系人' prop="FContact"> <el-form-item label="联系人" prop="FContact">
<el-input v-model="ruleFrom.FContact" readonly></el-input> <el-input v-model="ruleFrom.FContact" readonly></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='电话' prop="FPhone"> <el-form-item label="电话" prop="FPhone">
<el-input v-model="ruleFrom.FPhone" placeholder='请输入电话' readonly></el-input> <el-input v-model="ruleFrom.FPhone" placeholder="请输入电话" readonly></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@@ -102,15 +97,13 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='币别' prop="FCurrId"> <el-form-item label="币别" prop="FCurrId">
<el-input v-model="ruleFrom.FCurrId" readonly></el-input> <el-input v-model="ruleFrom.FCurrId" readonly></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="含税" prop="FIsIncludedTax" style="text-align: left"> <el-form-item label="含税" prop="FIsIncludedTax" style="text-align: left">
<el-switch v-model="ruleFrom.FIsIncludedTax" :active-value="'true'" :inactive-value="'false'" <el-switch v-model="ruleFrom.FIsIncludedTax" :active-value="'true'" :inactive-value="'false'" active-color="#13ce66" inactive-color="#ff4949" :disabled="true"> </el-switch>
active-color="#13ce66" inactive-color="#ff4949" :disabled="true">
</el-switch>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -122,18 +115,17 @@
<el-divider content-position="left"></el-divider> <el-divider content-position="left"></el-divider>
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='采购组织' prop="FPurOrgId"> <el-form-item label="采购组织" prop="FPurOrgId">
<el-input v-model="ruleFrom.FPurOrgId" readonly /> <el-input v-model="ruleFrom.FPurOrgId" readonly />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='询价日期' prop="FDate"> <el-form-item label="询价日期" prop="FDate">
<el-date-picker type="date" format="yyyy年MM月dd日 HH时mm分ss秒" value-format="yyyy-MM-dd HH:mm:ss" <el-date-picker type="date" format="yyyy年MM月dd日 HH时mm分ss秒" value-format="yyyy-MM-dd HH:mm:ss" v-model="ruleFrom.FDate" style="width: 100%" readonly />
v-model="ruleFrom.FDate" style="width: 100%;" readonly />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label='询价员' prop="FBuyer"> <el-form-item label="询价员" prop="FBuyer">
<el-input v-model="ruleFrom.FBuyer" readonly /> <el-input v-model="ruleFrom.FBuyer" readonly />
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -141,63 +133,46 @@
</div> </div>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
</el-form> </el-form>
<el-tabs type="border-card" style="margin-top: 50px"> <el-tabs type="border-card" style="margin-top: 50px">
<el-tab-pane label="明细信息"> <el-tab-pane label="明细信息">
<div> <div>
<el-table :key="tableKey" :data="list" border fit highlight-current-row show-summary max-height="500px" <el-table :key="tableKey" :data="list" border fit highlight-current-row show-summary max-height="500px" style="width: 100%">
style="width: 100%">
<el-table-column prop="FSEQ" label="序号" align="center" width="50" fixed="left"></el-table-column> <el-table-column prop="FSEQ" label="序号" align="center" width="50" fixed="left"></el-table-column>
<el-table-column prop="FMaterialId" label="物料代码" min-width="150" fixed="left" align="center"> <el-table-column prop="FMaterialId" label="物料代码" min-width="150" fixed="left" align="center"> </el-table-column>
</el-table-column> <el-table-column prop="FMaterialName" label="物料名称" min-width="150" align="center"> </el-table-column>
<el-table-column prop="FMaterialName" label="物料名称" min-width="150" align="center"> <el-table-column prop="FTempMaterial" label="临时物料名称" min-width="150" align="center"> </el-table-column>
</el-table-column> <el-table-column prop="FMaterialModel" label="规格型号" min-width="150" align="center"> </el-table-column>
<el-table-column prop="FTempMaterial" label="临时物料名称" min-width="150" align="center"> <el-table-column prop="FUnitID" label="单位" min-width="150" align="center"> </el-table-column>
</el-table-column> <el-table-column prop="FQty" label="询价数量" min-width="100" align="center"> </el-table-column>
<el-table-column prop="FMaterialModel" label="规格型号" min-width="150" align="center">
</el-table-column>
<el-table-column prop="FUnitID" label="单位" min-width="150" align="center">
</el-table-column>
<el-table-column prop="FQty" label="询价数量" min-width="100" align="center">
</el-table-column>
<el-table-column prop="FPrice" label="不含税单价" min-width="100" align="center"> <el-table-column prop="FPrice" label="不含税单价" min-width="100" align="center">
<template slot-scope="scop"> <template slot-scope="scop">
<el-input type="number" v-model="scop.row.FPrice" v-show="priceInput" <el-input type="number" v-model="scop.row.FPrice" v-show="priceInput" @input="updatePrice(scop.row)"></el-input>
@input="updatePrice(scop.row)"></el-input>
<span v-show="!priceInput">{{ scop.row.FPrice }}</span> <span v-show="!priceInput">{{ scop.row.FPrice }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="FTaxRate" label="税率%" min-width="100" align="center"> <el-table-column prop="FTaxRate" label="税率%" min-width="100" align="center">
<template slot-scope="scop"> <template slot-scope="scop">
<el-input type="number" v-model="scop.row.FTaxRate" v-show="priceInput" <el-input type="number" v-model="scop.row.FTaxRate" v-show="priceInput" @input="updatePrice(scop.row)"></el-input>
@input="updatePrice(scop.row)"></el-input>
<span v-show="!priceInput">{{ scop.row.FTaxRate }}</span> <span v-show="!priceInput">{{ scop.row.FTaxRate }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="FTaxPrice" label="含税单价" min-width="110" align="center"> <el-table-column prop="FTaxPrice" label="含税单价" min-width="110" align="center"> </el-table-column>
</el-table-column> <el-table-column prop="FNote" label="备注" align="center" width="240"> </el-table-column>
<el-table-column prop="FNote" label="备注" align="center" width="240"> <el-table-column prop="FPayConditionId" label="付款方式" align="center" width="240"> </el-table-column>
</el-table-column>
<el-table-column prop="FPayConditionId" label="付款方式" align="center" width="240">
</el-table-column>
</el-table> </el-table>
<!-- 附件上传弹窗 --> <!-- 附件上传弹窗 -->
<el-dialog title="附件上传" :visible.sync="uploadDialogVisible" width="50%" :before-close="handleClose"> <el-dialog title="附件上传" :visible.sync="uploadDialogVisible" width="50%" :before-close="handleClose">
<div> <div>
<!-- 文件上传组件 --> <!-- 文件上传组件 -->
<el-upload class="upload-demo" action="uploadUrl" :auto-upload="false" :on-change="handleChange" multiple <el-upload class="upload-demo" action="uploadUrl" :auto-upload="false" :on-change="handleChange" multiple :file-list="fileList" :before-upload="handleBeforeUpload">
:file-list="fileList" :before-upload="handleBeforeUpload">
<el-button size="small" type="primary">选取文件上传到服务器</el-button> <el-button size="small" type="primary">选取文件上传到服务器</el-button>
</el-upload> </el-upload>
<!-- 文件列表展示 --> <!-- 文件列表展示 -->
<el-table :data="dataList" style="width: 100%; margin-top: 20px"> <el-table :data="dataList" style="width: 100%; margin-top: 20px">
<el-table-column prop="FID" label="FID"> <el-table-column prop="FID" label="FID"> </el-table-column>
</el-table-column> <el-table-column prop="FCREATETIME" label="文件名"> </el-table-column>
<el-table-column prop="FCREATETIME" label="文件名"> <el-table-column prop="FATTACHMENTNAME" label="上传时间"> </el-table-column>
</el-table-column>
<el-table-column prop="FATTACHMENTNAME" label="上传时间">
</el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="showConfirmDialog(scope.row.FID)">删除</el-button> <el-button type="text" @click="showConfirmDialog(scope.row.FID)">删除</el-button>
@@ -221,7 +196,6 @@
<el-button type="primary" @click="confirmDelete"> </el-button> <el-button type="primary" @click="confirmDelete"> </el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
@@ -284,24 +258,14 @@ export default {
}, },
}, },
rules: { rules: {
FSupplierId: [ FSupplierId: [{ required: true, message: "请输入供应商编码", trigger: ["blur", "change"] }],
{ required: true, message: "请输入供应商编码", trigger: ["blur", "change"] }, FExpiryDate: [{ required: true, message: "请选择报价截至日期", trigger: ["blur", "change"] }],
], FOpenDate: [{ required: true, message: "请选择开标日期", trigger: ["blur", "change"] }],
FExpiryDate: [
{ required: true, message: "请选择报价截至日期", trigger: ["blur", "change"] },
],
FOpenDate: [
{ required: true, message: "请选择开标日期", trigger: ["blur", "change"] },
],
}, },
}; };
}, },
created() { created() {
if ( if (this.$route.query.FBILLNO !== undefined && this.$route.query.username !== undefined && this.$route.query.password !== undefined) {
this.$route.query.FBILLNO !== undefined &&
this.$route.query.username !== undefined &&
this.$route.query.password !== undefined
) {
this.FBILLNO = this.$route.query.FBILLNO; this.FBILLNO = this.$route.query.FBILLNO;
this.username = this.$route.query.username; this.username = this.$route.query.username;
this.password = this.$route.query.password; this.password = this.$route.query.password;
@@ -323,10 +287,7 @@ export default {
}, },
methods: { methods: {
updatePrice(row) { updatePrice(row) {
row.FTaxPrice = ( row.FTaxPrice = (Number(row.FPrice || 0) * (1 + Number(row.FTaxRate || 0) / 100)).toFixed(2);
Number(row.FPrice || 0) *
(1 + (Number(row.FTaxRate || 0) / 100))
).toFixed(2);
}, },
saveData(IsAutoAdjustField) { saveData(IsAutoAdjustField) {
let query = { let query = {
@@ -404,27 +365,27 @@ export default {
}); });
}, },
handleChange(file, fileList) { handleChange(file, fileList) {
const isLt1M = file.size / 1024 / 1024 < 20; // 检查文件大小是否小于 1MB
const isLt1M = file.size / 1024 / 1024 < 1; // 检查文件大小是否小于 1MB if (!isLt1M) {
// if (!isLt1M) { this.$message.error("上传文件大小不能超过 20MB");
// this.$message.error('上传文件大小不能超过 1MB'); return isLt1M;
// return isLt1M; }
// }
console.log(file, fileList); console.log(file, fileList);
// 创建 FormData 对象 // 创建 FormData 对象
const formData = new FormData(); const formData = new FormData();
formData.append('file', file.raw); // 添加文件 formData.append("file", file.raw); // 添加文件
formData.append('FBILLNO1', this.FBILLNO); // 添加额外参数 formData.append("FBILLNO1", this.FBILLNO); // 添加额外参数
// 使用 axios 发送请求 // 使用 axios 发送请求
axios.post(this.uploadUrl, formData, { axios
.post(this.uploadUrl, formData, {
headers: { headers: {
'Content-Type': 'multipart/form-data', // 设置请求头 "Content-Type": "multipart/form-data", // 设置请求头
}, },
}) })
.then(response => { .then((response) => {
if (response.data && response.data.status === 1) { if (response.data && response.data.status === 1) {
this.$message.success("文件上传成功"); this.$message.success("文件上传成功");
this.fetchFiles(); this.fetchFiles();
@@ -440,10 +401,10 @@ export default {
//限制文件不能大于1M //限制文件不能大于1M
handleBeforeUpload(file) { handleBeforeUpload(file) {
const isLt1M = file.size / 1024 / 1024 < 1; // 检查文件大小是否小于 1MB const isLt1M = file.size / 1024 / 1024 < 20; // 检查文件大小是否小于 1MB
if (!isLt1M) { // if (!isLt1M) {
this.$message.error('上传文件大小不能超过 1MB'); // this.$message.error('上传文件大小不能超过 1MB');
} // }
return isLt1M; // 如果文件大小超过 1MB返回 false 阻止上传 return isLt1M; // 如果文件大小超过 1MB返回 false 阻止上传
}, },
@@ -461,8 +422,9 @@ export default {
}; };
if (this.currentIndex !== null) { if (this.currentIndex !== null) {
console.log(this.currentIndex); console.log(this.currentIndex);
axios.post('/api/admin/delteFile', query) axios
.then(response => { .post("/api/admin/delteFile", query)
.then((response) => {
if (response.data && response.data.status === 1) { if (response.data && response.data.status === 1) {
this.$message.success("删除文件成功"); this.$message.success("删除文件成功");
this.fetchFiles(); this.fetchFiles();
@@ -470,7 +432,8 @@ export default {
const errorMessage = response.data && response.data.message ? response.data.message : "未知错误"; const errorMessage = response.data && response.data.message ? response.data.message : "未知错误";
this.$message.error(`删除文件失败: ${errorMessage}`); this.$message.error(`删除文件失败: ${errorMessage}`);
} }
}).catch((error) => { })
.catch((error) => {
this.$message.error(`文件删除失败: ${error.message}`); this.$message.error(`文件删除失败: ${error.message}`);
}); });
} }
@@ -490,7 +453,9 @@ export default {
password: this.password, password: this.password,
}; };
// 模拟从服务器获取数据 // 模拟从服务器获取数据
axios.post('/api/admin/CreateFile', query).then(response => { axios
.post("/api/admin/CreateFile", query)
.then((response) => {
// 假设响应的数据格式与之前相同,需要映射为 fileList 的格式 // 假设响应的数据格式与之前相同,需要映射为 fileList 的格式
// this.fileList = response.data.map(item => ({ // this.fileList = response.data.map(item => ({
// FID: item.id, // FID: item.id,
@@ -498,11 +463,12 @@ export default {
// CreateDate: item.uploadTime // CreateDate: item.uploadTime
// })); // }));
this.dataList = response.data.data this.dataList = response.data.data;
// console.log(this.dataList); // console.log(this.dataList);
// debugger // debugger
}).catch(error => { })
console.error('获取数据失败,联系开发人员', error); .catch((error) => {
console.error("获取数据失败,联系开发人员", error);
}); });
}, },
}, },

View File

@@ -7,22 +7,13 @@ module.exports = {
devServer: { devServer: {
port: port, port: port,
proxy: { proxy: {
'/api': { "/api": {
target: 'http://127.0.0.1:10002', // 后端接口的地址 target: "http://127.0.0.1:10002", // 后端接口的地址
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
'^/api': '', // 如果您的后端API路径不包含'/api',可以删除这一行 "^/api": "", // 如果您的后端API路径不包含'/api',可以删除这一行
}, },
}, },
// 特殊代理规则(直接发送到后端的 POST 请求)
// '/admin/upload': {
// target: 'http://192.168.10.20:10002', // 直接发送到后端的地址
// changeOrigin: true,
// pathRewrite: {
// '^/admin/upload': '' // 重写路径,去掉 /admin/upload 前缀
// }
// },
}, },
}, },
}; };