This commit is contained in:
2026-08-21 17:03:02 +08:00
commit f065129b20
2292 changed files with 666241 additions and 0 deletions
+767
View File
@@ -0,0 +1,767 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CLCBCX.aspx.cs" Inherits="GThinking.N_XLXSBJ.CLCBCX" %>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>材料成本查询</title>
<link rel="stylesheet" href="images/elmentindex.css">
<script src="images/vue@3.js"></script>
<script src="images/element-plus.js"></script>
<script src="images/icons-vue.js"></script>
<script src="images/zhCn.js"></script>
<script type="text/jscript" src="images/h5player.min.js"></script>
</head>
<style type="text/css">
.container {
display: flex;
flex-direction: column;
height: 100vh;
background: white;
padding: 8px;
}
.toolbar {
margin-bottom: 8px;
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.table-container {
height: 100%;
padding: 0 !important;
display: flex;
flex-direction: column;
overflow: hidden;
}
.pagination-container {
padding: 12px 0;
display: flex;
justify-content: center;
background: white;
}
.dialog-form {
padding: 20px 30px 0 0;
}
.full-width {
width: 100% !important;
}
.compact-form-item {
margin-bottom: 16px !important;
}
/* 对话框样式 */
.custom-dialog {
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
margin-top: 0 !important;
max-height: 90vh;
overflow-y: auto;
}
.dialog-header {
font-size: 18px;
font-weight: 600;
color: #303133;
display: flex;
align-items: center;
padding-bottom: 12px;
border-bottom: 1px solid #ebeef5;
}
.form-item {
margin-bottom: 20px;
}
.form-item .el-form-item__label {
color: #606266;
font-weight: 500;
}
.dialog-footer {
display: flex;
justify-content: flex-end;
gap: 12px;
padding-top: 16px;
border-top: 1px solid #ebeef5;
}
/* 表格样式 */
.custom-table {
--table-border-color: #ebf2f5;
--table-header-bg: #f8f9fa;
--table-hover-bg: #f5f7fa;
}
.custom-table.el-table--border {
border: 1px solid #a0cfff;
border-radius: 8px;
overflow: hidden;
}
.custom-table .el-table__header th {
text-align: center;
}
.table-header {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
padding: 0 8px;
}
.el-table .el-table__header th>.cell {
justify-content: center !important;
padding-left: 0 !important;
}
.el-table__body td {
padding: 4px 0 !important;
}
.el-table__body .cell {
line-height: 38px !important;
}
.custom-table .el-table__body tr:hover>td {
background-color: var(--table-hover-bg) !important;
}
.action-buttons {
display: flex;
gap: 8px;
justify-content: center;
}
.edit-btn {
color: #67c23a;
}
.delete-btn {
color: #f56c6c;
}
/* 新增自定义输入样式 */
.custom-input-select .custom-option {
color: #409eff;
font-style: italic;
}
/* 整体左右布局 */
.logo-upload-wrap {
display: flex;
align-items: center;
gap: 20px;
}
/* 上传框大小(和 Element Plus 默认拖拽框接近) */
.logo-upload-box {
width: 200px;
height: 120px;
}
.logo-upload-box .el-upload {
width: 100%;
height: 100%;
}
.logo-upload-box .el-upload-dragger {
width: 100%;
height: 100%;
box-sizing: border-box;
}
/* 预览框:和上传框一样大 */
.logo-preview-box {
width: 200px;
height: 120px;
border: 1px dashed #dcdfe6;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
background: #fafafa;
overflow: hidden;
}
/* 图片缩放规则(关键) */
.logo-preview-img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
/* 等比缩放,不裁剪 */
}
/* 未上传时的占位文字 */
.logo-preview-empty {
color: #c0c4cc;
font-size: 12px;
}
.logo-row {
display: flex;
align-items: center;
gap: 12px;
}
.logo-upload-box {
width: 220px;
}
.logo-preview-box {
width: 220px;
height: 120px;
border: 1px dashed #dcdfe6;
display: flex;
align-items: center;
justify-content: center;
}
.logo-preview-img {
max-width: 100%;
max-height: 100%;
}
.logo-download-btn {
height: 32px;
margin-top: auto;
}
/* 响应式优化 */
@media (max-width: 768px) {
.custom-table .hidden-xs {
display: none;
}
.action-buttons {
gap: 4px;
}
.action-btn {
padding: 4px;
}
}
/* ========== 工具条按钮美化样式 ========== */
.tool-btn {
padding: 6px 15px;
border-radius: 4px;
font-size: 13px;
font-weight: 500;
transition: all 0.25s ease;
border: 1px solid #409eff;
background: #fff;
color: #409eff;
height: 32px;
display: inline-flex;
align-items: center;
justify-content: center;
}
.tool-btn:hover {
background: #409eff;
color: #fff;
border-color: #409eff;
box-shadow: 0 2px 4px rgba(64, 158, 255, 0.2);
}
.tool-btn:active {
transform: translateY(1px);
}
/* ========== 底部版权样式 ========== */
.copyright-container {
width: 100%;
background: #f5f7fa;
border-top: 1px solid #e4e7ed;
padding: 10px 0;
margin-top: 5px;
}
.copyright-inner {
text-align: center;
font-size: 12px;
color: #909399;
}
.copyright-dot {
margin: 0 8px;
color: #c0c4cc;
}
</style>
<style>
.search-panel-mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.3);
z-index: 999;
display: flex;
justify-content: flex-end;
align-items: flex-start;
padding-top: 60px;
box-sizing: border-box;
}
.search-panel {
position: relative;
max-height: calc(100vh - 60px);
overflow-y: auto;
}
/* 调整表格容器样式,确保被覆盖 */
.table-container {
position: relative;
}
.panel-header {
display: flex;
justify-content: space-between;
align-items: center;
height: 40px;
border-bottom: 1px solid #ebeef5;
}
/* 导入对话框样式 */
.import-dialog {
border-radius: 12px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
max-height: 60vh;
overflow-y: auto;
background: white;
z-index: 2000;
}
.import-dialog-header {
font-size: 18px;
font-weight: 600;
color: #303133;
display: flex;
align-items: center;
padding-bottom: 16px;
border-bottom: 1px solid #f0f2f5;
margin-bottom: 0;
}
.import-form .el-form-item__label {
color: #606266;
font-weight: 500;
font-size: 14px;
}
.import-dialog-footer {
display: flex;
justify-content: space-between;
align-items: center;
gap: 12px;
padding-top: 12px;
border-top: 1px solid #f0f2f5;
margin-top: 0;
}
/* 拖拽上传样式 */
.el-upload-dragger {
border: 2px dashed #d9d9d9;
border-radius: 8px;
background-color: #fafafa;
text-align: center;
cursor: pointer;
position: relative;
overflow: hidden;
transition: border-color 0.3s;
height: 100px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.el-upload-dragger:hover {
border-color: #409eff;
background-color: #f0f8ff;
}
.el-upload-dragger.is-dragover {
border-color: #409eff;
background-color: #e6f7ff;
}
.el-upload-dragger .el-icon--upload {
font-size: 28px;
color: #c0c4cc;
margin-bottom: 8px;
transition: color 0.3s;
}
.el-upload-dragger:hover .el-icon--upload {
color: #409eff;
}
.el-upload__text {
color: #606266;
font-size: 14px;
text-align: center;
}
.el-upload__text em {
color: #409eff;
font-style: normal;
font-weight: 500;
}
.el-upload__tip {
font-size: 12px;
color: #909399;
margin-top: 4px;
text-align: center;
}
.save-as-btn {
top: 10px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
background-color: transparent;
border: 1px solid #409eff;
color: #409eff;
padding: 0 10px;
border-radius: 4px;
font-size: 14px;
cursor: pointer;
outline: none;
transition: all 0.3s;
z-index: 1;
}
.save-as-btn:hover {
background-color: #409eff;
color: white;
border-color: #3a8ee6;
box-shadow: 0 2px 4px rgba(64, 158, 255, 0.3);
transform: translateY(-1px);
}
.grid-content {
border-radius: 4px;
min-height: 36px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: left;
}
.cxtj-span {
color: #000;
font-size: 12px;
margin-bottom: 5px;
}
.table-container {
width: 100%;
height: 100%;
box-sizing: border-box;
overflow: hidden;
}
/* 整个 dialog 固定高度 */
.fixed-dialog .el-dialog__body {
height: 600px; /* 你想要的弹窗高度 */
display: flex;
flex-direction: column;
overflow: hidden; /* 防止撑开 */
}
/* 内容整体布局 */
.dialog-body {
display: flex;
flex-direction: column;
height: 100%;
}
/* 上方基本信息固定高度 */
.basic-info {
flex-shrink: 0; /* 不允许被压缩 */
margin-bottom: 15px;
}
/* 表格区域占剩余空间 */
.table-wrapper {
flex: 1; /* 占剩余空间 */
min-height: 0; /* ⭐⭐⭐ 非常重要 */
}
</style>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
<gtc:gtTextBox ID="txtBJU061" runat="server" Width="120px" style="display: none"></gtc:gtTextBox>
<div id="app">
<el-container class="container">
<!-- ========== 工具条:按钮美化 + 靠右显示 ========== -->
<el-header height="auto">
<el-row :gutter="8" class="toolbar">
<el-col :span="24" style="display: flex; justify-content: flex-end; gap: 10px;">
<el-button v-if="enableSJDC" class="tool-btn" size="small" @click="sjdc">
导出数据
</el-button>
<el-button class="tool-btn" size="small" @click="openQueryDrawer">
查询条件
</el-button>
</el-col>
</el-row>
</el-header>
<div class="table-container" ref="tableContainer" v-loading="loading" element-loading-background="rgba(245, 245, 245, 0.8)">
<el-table-v2 :key="tableVersion" :columns="columns" :data="pagedData" :width="tableWidth"
:height="tableHeight" row-key="XH" fixed :fit="false" :row-event-handlers="rowEventHandlers"/>
</div>
<el-footer height="auto">
<div class="pagination-container">
<el-pagination v-model:current-page="currentPage" :page-sizes="[100,500,1000,5000,10000]"
:page-size="pageSize" size="middle" layout="prev, pager, next, jumper, sizes"
:total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
</div>
</el-footer>
<!-- ========== 底部版权信息 ========== -->
<div class="copyright-container">
<div class="copyright-inner">
<span>© 2026 江苏金思维软件有限公司</span>
<span class="copyright-dot">·</span>
<span>保留所有权利</span>
</div>
</div>
<el-dialog v-model="detailDialogVisible" width="1000px" class="fixed-dialog" title="线缆销售报价材料成本" align-center>
<div class="dialog-body">
<el-descriptions :column="3" border style="margin-bottom:20px">
<el-descriptions-item label="型号">
{{ detailBasicInfo.型号 }}
</el-descriptions-item>
<el-descriptions-item label="规格">
{{ detailBasicInfo.规格 }}
</el-descriptions-item>
<el-descriptions-item label="材料成本">
{{ detailBasicInfo.材料成本 }}
</el-descriptions-item>
<el-descriptions-item label="电压等级">
{{ detailBasicInfo.电压等级 }}
</el-descriptions-item>
<el-descriptions-item label="标准">
{{ detailBasicInfo.标准 }}
</el-descriptions-item>
<el-descriptions-item label="材料重量">
{{ detailBasicInfo.材料重量 }}
</el-descriptions-item>
<el-descriptions-item label="结构尺重表" :span="3">
{{ detailBasicInfo.结构尺重表 }}
</el-descriptions-item>
<el-descriptions-item label="备注" :span="3">
{{ detailBasicInfo.备注 }}
</el-descriptions-item>
<el-descriptions-item label="维护人" >
{{ detailBasicInfo.维护人 }}
</el-descriptions-item>
<el-descriptions-item label=""></el-descriptions-item>
<el-descriptions-item label="维护时间">
{{ detailBasicInfo.维护时间 }}
</el-descriptions-item>
</el-descriptions>
<div class="table-wrapper">
<el-table :data="detailMaterialList" height="100%" size="small" stripe border fit highlight-current-row
style="width: 100%; border-radius: 8px;" class="custom-table"
element-loading-background="rgba(245, 245, 245, 0.8)" element-loading-spinner="el-icon-loading">
<el-table-column prop="材料编码" label="材料编码" min-width="120" header-align="left" align="left">
<template #header><span class="table-header">材料编码</span></template>
</el-table-column>
<el-table-column prop="材料名称" label="材料名称" min-width="120" header-align="left" align="left">
<template #header><span class="table-header">材料名称</span></template>
</el-table-column>
<el-table-column prop="物料信息" label="物料信息" min-width="120" header-align="left" align="left">
<template #header><span class="table-header">物料信息</span></template>
</el-table-column>
<el-table-column prop="材料用量" label="材料用量(Kg/M)" min-width="120" header-align="left" align="left">
<template #header><span class="table-header">材料用量(Kg/M)</span></template>
</el-table-column>
<el-table-column prop="材料比例" label="材料比例" min-width="120" header-align="left" align="left">
<template #header><span class="table-header">材料用量比例</span></template>
</el-table-column>
<el-table-column prop="材料损耗率" label="材料损耗率(%)" min-width="120" header-align="left" align="left">
<template #header><span class="table-header">材料损耗率(%)</span></template>
</el-table-column>
<el-table-column prop="材料价格" label="材料价格(元/Kg)" min-width="120" header-align="left" align="left">
<template #header><span class="table-header">材料价格(元/Kg)</span></template>
</el-table-column>
<el-table-column prop="材料成本" label="材料成本(元/M)" min-width="120" header-align="left" align="left">
<template #header><span class="table-header">材料成本(元/M)</span></template>
</el-table-column>
</el-table>
</div>
</div>
</el-dialog>
<el-drawer v-model="queryDrawerVisible" :with-header="false" direction="rtl" size="500px">
<div style="padding: 20px; padding-bottom: 80px;">
<el-row :gutter="24" style="margin-bottom: 15px;">
<el-col :span="24">
<div class="grid-content">
<span class="cxtj-span" style="margin-bottom: 10px">价格表:</span>
<el-select size="small" v-model="queryConditions.jgbid"
clearable placeholder="请选择价格表" style="width: 100%">
<el-option v-for="item in jgbOptions" :key="item.value"
:label="item.label" :value="item.value" />
</el-select>
</div>
</el-col>
</el-row>
<el-row :gutter="24" style="margin-bottom: 15px;">
<el-col :span="24">
<div class="grid-content">
<span class="cxtj-span" style="margin-bottom: 10px">结构尺重表:</span>
<el-select size="small" v-model="queryConditions.structureWeightTableValue"
clearable placeholder="请选择结构尺重表" style="width: 100%"
@change="handleStructureWeightChange">
<el-option v-for="item in jgczbOptions" :key="item.value"
:label="item.label" :value="item.value" />
</el-select>
</div>
</el-col>
</el-row>
<el-row :gutter="24" style="margin-bottom: 15px;">
<el-col :span="24">
<div class="grid-content">
<span class="cxtj-span" style="margin-bottom: 10px">型号:</span>
<el-select v-model="queryConditions.models" multiple clearable
placeholder="请输入型号进行搜索" size="small" style="width: 100%"
filterable remote :remote-method="remoteSearchModel" :loading="modelLoading"
@change="handleModelChange">
<el-option v-for="item in filteredXhOptions" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</div>
</el-col>
</el-row>
<el-row :gutter="24" style="margin-bottom: 15px;">
<el-col :span="24">
<div class="grid-content">
<span class="cxtj-span" style="margin-bottom: 10px">标准:</span>
<el-select v-model="queryConditions.standard" clearable placeholder="请选择标准"
size="small" style="width: 100%">
<el-option v-for="item in standardOptions" :key="item.value"
:label="item.label" :value="item.value" />
</el-select>
</div>
</el-col>
</el-row>
<el-row :gutter="24" style="margin-bottom: 15px;">
<el-col :span="24">
<div class="grid-content">
<span class="cxtj-span" style="margin-bottom: 10px">电压等级:</span>
<el-select v-model="queryConditions.voltageLevel" clearable
placeholder="请选择电压等级" size="small" style="width: 100%"
@change="handleVoltageLevelChange">
<el-option v-for="item in dydjOptions" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</div>
</el-col>
</el-row>
<el-row :gutter="24" style="margin-bottom: 15px;">
<el-col :span="24">
<div class="grid-content">
<el-checkbox v-model="queryConditions.iSHSJGCheck">
含税价格
</el-checkbox>
</div>
</el-col>
</el-row>
<el-row :gutter="24" style="margin-bottom: 15px;">
<el-col :span="24">
<div class="grid-content">
<span class="cxtj-span" style="margin-bottom: 10px">导入文件:</span>
<el-upload
ref="uploadRef"
action="#"
:auto-upload="false"
:limit="1"
:on-change="handleFileChange"
:on-remove="handleFileRemove"
accept=".xlsx,.xls"
style="width: 100%">
<el-button size="small" type="primary">选择文件</el-button>
<template #tip>
<div class="el-upload__tip" style="color: #909399; font-size: 12px; margin-top: 5px;">
请上传Excel文件,栏目必须为:型号,规格,标准,电压等级
</div>
</template>
</el-upload>
<div v-if="queryConditions.fileName" style="margin-top: 8px; color: #67c23a; font-size: 12px;">
已选择文件:{{ queryConditions.fileName }}
</div>
</div>
</el-col>
</el-row>
<el-row :gutter="24" style="margin-bottom: 15px;">
<el-col :span="24">
<div class="grid-content">
<el-checkbox v-model="queryConditions.iSDRCXChecked">
按导入文件查询
</el-checkbox>
</div>
</el-col>
</el-row>
<el-row :gutter="24" style="margin-bottom: 15px;">
<el-col :span="24">
<div class="grid-content">
<el-checkbox v-model="queryConditions.iSWLCBCheck">
显示线缆产品物料成本
</el-checkbox>
</div>
</el-col>
</el-row>
<el-row :gutter="24" style="margin-bottom: 15px;">
<el-col :span="24">
<div class="grid-content">
<span class="cxtj-span" style="margin-bottom: 10px">排序方式:</span>
<el-select v-model="queryConditions.orderOption" clearable placeholder="请选择排序方式"
size="small" style="width: 100%">
<el-option v-for="item in pxfsOptions" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</div>
</el-col>
</el-row>
</div>
<div
style="position: fixed; bottom: 0; right: 0; width: 500px; background: #fff; border-top: 1px solid #e4e7ed; padding: 15px 20px; text-align: right; z-index: 2001;">
<el-button size="small" @click="handleResetFilter" plain>重 置</el-button>
<el-button type="primary" size="small" @click="confirmQueryDrawer">确 定</el-button>
</div>
</el-drawer>
</el-container>
</div>
<script src="images/xlsx.full.min.js"></script>
<script src='images/CLCBCX.js?ver=<%=GThinking.N_MISPROAS.Web.ResFile.GetVer("Q_YCGL8") %>'></script>
</form>
</body>
</html>