src/views/productionManagement/productionCosting/index.vue
@@ -1,45 +1,40 @@ <template> <div class="app-container"> <div class="search_form"> <div> <span class="search_title">生产日期:</span> <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange" placeholder="请选择" clearable @change="changeDaterange" /> <span class="search_title ml10">生产人:</span> <el-input v-model="searchForm.schedulingUserName" style="width: 240px" placeholder="请输入" @change="handleQuery" clearable prefix-icon="Search" /> <span class="search_title ml10">合同号:</span> <el-input v-model="searchForm.salesContractNo" style="width: 240px" placeholder="请输入" @change="handleQuery" clearable prefix-icon="Search" /> <el-button type="primary" @click="handleQuery" style="margin-left: 10px" >搜索</el-button > <div class="content-layout"> <!-- 左侧台账 + 顶部筛选 --> <div class="left-panel"> <div class="left-header"> <!-- <div class="left-title">生产台账</div> --> <el-radio-group v-model="dateType" size="small" @change="handleDateTypeChange"> <el-radio-button label="day">日</el-radio-button> <el-radio-button label="month">月</el-radio-button> </el-radio-group> </div> <PIMTable rowKey="id" :column="leftTableColumn" :tableData="leftTableData" :tableLoading="tableLoading" @rowClick="handleLeftRowClick" ></PIMTable> </div> <div> <el-button @click="handleOut">导出</el-button> <!-- 右侧明细(原有内容) --> <div class="right-panel"> <div class="header-filters"> <el-button @click="handleOut" class="ml10">导出</el-button> </div> <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :tableLoading="tableLoading" style="margin-right: 20px;" @pagination="pagination" ></PIMTable> </div> </div> <div class="table_list"> <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :tableLoading="tableLoading" @pagination="pagination" ></PIMTable> </div> </div> </template> @@ -119,8 +114,36 @@ width: 100, }, ]); // 左侧汇总台账列(生产人、产量、工资、合格率) const leftTableColumn = ref([ { label: "生产人", prop: "schedulingUserName", width: 120, }, { label: "产量", prop: "finishedNum", width: 100, }, { label: "工资", prop: "wages", width: 100, }, { label: "合格率", prop: "qualifiedRate", width: 100, }, ]); const tableData = ref([]); const tableLoading = ref(false); const leftTableData = ref([]); // 日 / 月 切换(默认按日) const dateType = ref("day"); const page = reactive({ current: 1, size: 100, @@ -165,12 +188,50 @@ const getList = () => { tableLoading.value = true; const params = { ...searchForm.value, ...page }; params.dateType = dateType.value; params.entryDate = undefined productionAccountingListPage(params).then((res) => { tableLoading.value = false; tableData.value = res.data.records; page.total = res.data.total; const records = res.data.records || []; tableData.value = records; page.total = res.data.total || 0; buildLeftTableData(records); }); }; // 构建左侧汇总台账(按生产人汇总产量、工资等) const buildLeftTableData = (records) => { const map = {}; records.forEach((item) => { const key = item.schedulingUserName || "未知"; if (!map[key]) { map[key] = { id: key, schedulingUserName: key, finishedNum: 0, wages: 0, qualifiedRate: item.qualifiedRate ?? null, }; } map[key].finishedNum += Number(item.finishedNum || 0); map[key].wages += Number(item.wages || 0); if (item.qualifiedRate != null) { map[key].qualifiedRate = item.qualifiedRate; } }); leftTableData.value = Object.values(map); }; // 左侧日/月切换 const handleDateTypeChange = () => { // 这里只作为筛选条件的一部分,直接重新查询列表 handleQuery(); }; // 点击左侧行,刷右侧明细(按生产人过滤) const handleLeftRowClick = (row) => { searchForm.value.schedulingUserName = row.schedulingUserName || ""; handleQuery(); }; // 导出 @@ -193,4 +254,53 @@ }); </script> <style scoped lang="scss"></style> <style scoped lang="scss"> .content-layout { display: flex; gap: 16px; } .left-panel { flex: 0 0 50%; max-width: 50%; display: flex; flex-direction: column; gap: 10px; } .right-panel { flex: 0 0 50%; max-width: 49%; display: flex; flex-direction: column; gap: 10px; } .left-header { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; } .left-title { font-size: 16px; color: #ffffff; } .header-filters { display: flex; align-items: center; flex: 1; justify-content: flex-end; gap: 8px; } .search_title { color: #ffffff; } .ml10 { margin-left: 10px; } </style> src/views/qualityManagement/finalInspection/components/filesDia.vue
@@ -26,20 +26,14 @@ rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :tableLoading="tableLoading" :isSelection="true" @selection-change="handleSelectionChange" @pagination="paginationSearch" height="500" > </PIMTable> <pagination style="margin: 10px 0" v-show="total > 0" @pagination="paginationSearch" :total="total" :page="page.current" :limit="page.size" /> <template #footer> <div class="dialog-footer"> <el-button @click="closeDia">取消</el-button> @@ -64,7 +58,6 @@ qualityInspectFileDel, qualityInspectFileListPage } from "@/api/qualityManagement/qualityInspectFile.js"; import Pagination from "@/components/PIMTable/Pagination.vue"; const { proxy } = getCurrentInstance() const emit = defineEmits(['close']) @@ -94,8 +87,8 @@ const page = reactive({ current: 1, size: 100, total: 0, }); const total = ref(0); const tableData = ref([]); const fileList = ref([]); const tableLoading = ref(false); @@ -116,9 +109,9 @@ getList(); }; const getList = () => { qualityInspectFileListPage({inspectId: currentId.value}).then(res => { qualityInspectFileListPage({inspectId: currentId.value, ...page}).then(res => { tableData.value = res.data.records; total.value = res.data.total; page.total = res.data.total; }) } // 表格选择数据 src/views/qualityManagement/processInspection/components/filesDia.vue
@@ -26,20 +26,14 @@ rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :tableLoading="tableLoading" :isSelection="true" @selection-change="handleSelectionChange" @pagination="paginationSearch" height="500" > </PIMTable> <pagination style="margin: 10px 0" v-show="total > 0" @pagination="paginationSearch" :total="total" :page="page.current" :limit="page.size" /> <template #footer> <div class="dialog-footer"> <el-button @click="closeDia">取消</el-button> @@ -60,7 +54,6 @@ qualityInspectFileDel, qualityInspectFileListPage } from "@/api/qualityManagement/qualityInspectFile.js"; import Pagination from "@/components/PIMTable/Pagination.vue"; const { proxy } = getCurrentInstance() const emit = defineEmits(['close']) @@ -98,8 +91,8 @@ const page = reactive({ current: 1, size: 100, total: 0, }); const total = ref(0); const tableData = ref([]); const fileList = ref([]); const tableLoading = ref(false); @@ -120,9 +113,9 @@ getList(); }; const getList = () => { qualityInspectFileListPage({inspectId: currentId.value}).then(res => { qualityInspectFileListPage({inspectId: currentId.value, ...page}).then(res => { tableData.value = res.data.records; total.value = res.data.total; page.total = res.data.total; }) } // 表格选择数据 src/views/qualityManagement/rawMaterialInspection/components/filesDia.vue
@@ -26,20 +26,14 @@ rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :tableLoading="tableLoading" :isSelection="true" @selection-change="handleSelectionChange" @pagination="paginationSearch" height="500" > </PIMTable> <pagination style="margin: 10px 0" v-show="total > 0" @pagination="paginationSearch" :total="total" :page="page.current" :limit="page.size" /> <template #footer> <div class="dialog-footer"> <el-button @click="closeDia">取消</el-button> @@ -60,7 +54,6 @@ qualityInspectFileDel, qualityInspectFileListPage } from "@/api/qualityManagement/qualityInspectFile.js"; import Pagination from "@/components/PIMTable/Pagination.vue"; const { proxy } = getCurrentInstance() const emit = defineEmits(['close']) @@ -97,8 +90,8 @@ const page = reactive({ current: 1, size: 100, total: 0, }); const total = ref(0); const tableData = ref([]); const fileList = ref([]); const tableLoading = ref(false); @@ -122,7 +115,7 @@ const getList = () => { qualityInspectFileListPage({inspectId: currentId.value, ...page}).then(res => { tableData.value = res.data.records; total.value = res.data.total; page.total = res.data.total; }) } // 表格选择数据 src/views/reportAnalysis/PSIDataAnalysis/components/left-bottom.vue
@@ -1,6 +1,6 @@ <template> <div> <PanelHeader title="产品采购金额分析" /> <PanelHeader title="采购品分布" /> <div class="main-panel panel-item-customers"> <CarouselCards :items="cardItems" :visible-count="3" /> <div class="pie-chart-wrapper"> src/views/reportAnalysis/PSIDataAnalysis/components/left-top.vue
@@ -1,6 +1,6 @@ <template> <div> <PanelHeader title="产品销售金额分析" /> <PanelHeader title="销售品分布" /> <div class="main-panel panel-item-customers"> <CarouselCards :items="cardItems" :visible-count="3" /> <div class="pie-chart-wrapper"> src/views/reportAnalysis/dataDashboard/components/basic/right-bottom.vue
@@ -1,6 +1,6 @@ <template> <div> <PanelHeader title="客户金额贡献排名" /> <PanelHeader title="客户贡献排名" /> <div class="panel-item-customers"> <div class="switch-container"> <DateTypeSwitch v-model="dateType" @change="handleDateTypeChange" /> src/views/reportAnalysis/financialAnalysis/components/center-top.vue
@@ -47,7 +47,7 @@ </div> <div class="card-right"> <div class="metric-row"> <span class="metric-label">净利润</span> <span class="metric-label">付款率</span> <span class="metric-value metric-down">{{ expense.netProfit }}</span> </div> <div class="metric-row">