@@ -238,4 +219,4 @@ onUnmounted(() => {
height: 60%;
}
}
-
+
\ No newline at end of file
diff --git a/src/views/largeScreen/components/leftPage.vue b/src/views/largeScreen/components/leftPage.vue
index 325df42..8df1317 100644
--- a/src/views/largeScreen/components/leftPage.vue
+++ b/src/views/largeScreen/components/leftPage.vue
@@ -2,41 +2,34 @@
-
-
+
-
+
-
+
+ progressColor="rgba(255, 147, 42, 1)" />
+
+
+
-
+
-
-
@@ -56,7 +49,7 @@ import EchartBox from '@/components/EchartBox/index.vue';
import { incomePay, expensesPay, incomeAnalyze, expensesAnalyze } from '@/api/largeScreen/index';
// 初始化数据容器
-const incomeData = ref({ planAmount: '0.00', actualAmount: '0.00' }); // 收入相关数据(应收/收款)
+const incomeData = ref({ planAmount: '0.00', actualAmount: '0.00' }); // 收入相关数据(应收/收款)
const expensesData = ref({ planAmount: '0.00', actualAmount: '0.00' }); // 支出相关数据(应付/付款)
const pieOption = ref({}); // 环形图配置
const activeChart = ref('income'); // 当前激活的图表类型:income-收入合同,expenses-支出合同
@@ -202,8 +195,8 @@ const generatePieOption = (data) => {
{
name: '合同数量',
type: 'pie',
- radius: ['45%', '65%'],
- center: ['50%', '60%'],
+ radius: ['30%', '60%'],
+ center: ['50%', '80%'],
data: [], // 空数据,避免显示圆环
itemStyle: { borderColor: '#000', borderWidth: 1 },
// 中心显示“加载中”提示
@@ -309,18 +302,21 @@ onMounted(async () => {
.leftPage {
width: 100%;
height: 100%;
+
.kpi_box {
margin-bottom: 10px;
}
+
.contract_box {
- height: 35vh;
+ height: 33vh;
display: flex;
flex-direction: column; // 按钮区和图表区垂直排列
}
+
.chart-container {
- flex: 1; // 占满剩余高度,确保图表容器足够大
- min-height: 200px; // 最小高度,避免容器过矮
+ height: 28vh;
}
+
.kpi_box,
.contract_box {
padding: 10px;
diff --git a/src/views/largeScreen/components/optionList.ts b/src/views/largeScreen/components/optionList.ts
index 8ed0f51..3c7c900 100644
--- a/src/views/largeScreen/components/optionList.ts
+++ b/src/views/largeScreen/components/optionList.ts
@@ -696,6 +696,7 @@ export const getInventoryOption = () => {
};
export const getBarOptions = (data: any) => {
const option = {
+
legend: {
show: true,
top: '50%',
@@ -714,6 +715,9 @@ export const getBarOptions = (data: any) => {
formatter: '{b0}:{c0}万元',
textStyle: {
color: '#fff'
+ },
+ axisPointer: {
+ type: 'shadow' // 默认为直线,可选为:'line' | 'shadow',
}
// borderColor: 'rgba(252, 217, 18, 1)'
},
diff --git a/src/views/largeScreen/components/rightPage.vue b/src/views/largeScreen/components/rightPage.vue
index 605173c..f9e9bfd 100644
--- a/src/views/largeScreen/components/rightPage.vue
+++ b/src/views/largeScreen/components/rightPage.vue
@@ -45,7 +45,7 @@ import TitleComponent from './TitleComponent.vue';
import EchartBox from '@/components/EchartBox/index.vue';
import { getLineOption, getBarOptions } from './optionList';
import ProgressComponent from './ProgressComponent.vue';
-import { monthMoney, monthCash, cashTotal } from '@/api/largeScreen';
+import { monthMoney, monthCash, cashTotal } from '@/api/largeScreen/index';
const lineOption = ref();
const barOption = ref();
@@ -90,6 +90,8 @@ const getTurnoverList = async () => {
expenses
]
};
+ console.log(barData);
+
barOption.value = getBarOptions(barData);
};
const getTotalAmonunt = async () => {
diff --git a/src/views/patch/index.vue b/src/views/patch/index.vue
index 149aea8..1aaa708 100644
--- a/src/views/patch/index.vue
+++ b/src/views/patch/index.vue
@@ -1,7 +1,8 @@
-
+
@@ -21,10 +22,12 @@
- 新增
+ 新增
- 导出
+ 导出
@@ -56,10 +59,10 @@
+ :class="[Number(scope.row.taskStatus) === 0 ? 'text-warning' : Number(scope.row.taskStatus) === 1 ? 'text-success' : 'text-danger']">
{{
- Number(scope.row.taskStatus) === 0 ? '未完成' : Number(scope.row.taskStatus) === 1 ? '已完成' : `未知状态(${scope.row.taskStatus})`
+ Number(scope.row.taskStatus) === 0 ? '未完成' : Number(scope.row.taskStatus) === 1 ? '已完成' :
+ `未知状态(${scope.row.taskStatus})`
}}
@@ -71,13 +74,15 @@
-->
-
+
-
+
新增进度
@@ -94,37 +99,28 @@
-
+
-
+
-
+
-
+
-
+
@@ -139,13 +135,15 @@
-
+
-
+
已自动关联当前选中项目
@@ -154,14 +152,17 @@
-
+
-
+
-
+
@@ -243,7 +244,7 @@ interface ProgressDetail {
updateTime?: string;
projectId?: string | number;
}
-interface ProgressForm extends Omit {}
+interface ProgressForm extends Omit { }
// 4. 获取组件实例
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -631,7 +632,9 @@ const handleProgressInput = () => {
const handleExport = () => {
proxy?.download('patch/patch/export', { ...queryParams.value }, `任务列表_${new Date().getTime()}.xlsx`);
};
-
+onMounted(() => {
+ getList();
+});
// 监听项目id刷新数据
const listeningProject = watch(
() => currentProject.value?.id,
@@ -651,13 +654,16 @@ onUnmounted(() => {
.mb-4 {
margin-bottom: 16px;
}
+
.el-table .small-padding .cell {
padding: 0 5px;
}
+
.el-table .fixed-width {
width: 120px !important;
}
-.el-table-column .el-button--text + .el-button--text {
+
+.el-table-column .el-button--text+.el-button--text {
margin-left: 10px;
}
From cff2ce34f107f4b3ec76b7e458b6fe144f60257d Mon Sep 17 00:00:00 2001
From: tcy <1193318383@qq.com>
Date: Fri, 22 Aug 2025 19:14:27 +0800
Subject: [PATCH 10/17] =?UTF-8?q?refactor(largeScreen):=20=E4=BC=98?=
=?UTF-8?q?=E5=8C=96=E7=8E=B0=E9=87=91=E6=B5=81=E6=8A=A5=E8=A1=A8=E6=A0=B7?=
=?UTF-8?q?=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 调整 legend 位置和样式
- 优化 tooltip 内容和格式
- 调整图表布局和样式
---
.../largeScreen/components/optionList.ts | 30 ++++++++++++-------
1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/src/views/largeScreen/components/optionList.ts b/src/views/largeScreen/components/optionList.ts
index 3c7c900..0daec3b 100644
--- a/src/views/largeScreen/components/optionList.ts
+++ b/src/views/largeScreen/components/optionList.ts
@@ -696,23 +696,29 @@ export const getInventoryOption = () => {
};
export const getBarOptions = (data: any) => {
const option = {
-
- legend: {
- show: true,
- top: '50%',
- },
backgroundColor: '',
grid: {
left: '8%',
- top: '4%',
+ top: '10%', // 顶部留一点空间给 legend
bottom: '8%',
right: '2%'
},
+ legend: {
+ data: ['现金流入', '现金流出'], // 与 series.name 对应
+ top: '0%',
+ textStyle: { color: '#fff', fontSize: 12 }
+ },
tooltip: {
show: true,
backgroundColor: '',
trigger: 'axis',
- formatter: '{b0}:{c0}万元',
+ // formatter: '{b0}:{c0}万元',
+ formatter: (params: any) => {
+ // params 是数组,对应每条柱子
+ return params
+ .map((p: any) => `${p.seriesName}:${p.value} 万元`)
+ .join('
');
+ },
textStyle: {
color: '#fff'
},
@@ -788,6 +794,7 @@ export const getBarOptions = (data: any) => {
// ],
series: [
{
+ name: '现金流入',
type: 'bar',
data: data.value[0],
// stack: '合并',
@@ -826,6 +833,7 @@ export const getBarOptions = (data: any) => {
}
},
{
+ name: '现金流出',
type: 'bar',
data: data.value[1],
// stack: '合并',
@@ -859,8 +867,8 @@ export const getBarOptions = (data: any) => {
formatter: '{c}',
position: 'top',
color: '#fff',
- fontSize: 10
- // padding: 5
+ fontSize: 10,
+ padding: 5
}
}
]
@@ -888,7 +896,9 @@ export const getBarOptions2 = (data: any) => {
}
},
tooltip: {
- trigger: 'item'
+ trigger: 'item',
+ show: true
+
},
legend: {
top: '5%',
From 72577614aaa555c17e752f37b42880c9e69c782a Mon Sep 17 00:00:00 2001
From: tcy <1193318383@qq.com>
Date: Fri, 22 Aug 2025 19:32:49 +0800
Subject: [PATCH 11/17] =?UTF-8?q?feat(incomeContract):=20=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E6=9F=A5=E7=9C=8B=E6=89=BF=E5=8C=85=E5=86=85=E5=AE=B9?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=B9=B6=E8=B0=83=E6=95=B4=E6=93=8D=E4=BD=9C?=
=?UTF-8?q?=E5=88=97=E5=AE=BD=E5=BA=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 在操作列中添加"查看承包内容"按钮
- 调整操作列宽度为200,以适应新增的按钮
---
src/views/ctr/incomeContract/index.vue | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/views/ctr/incomeContract/index.vue b/src/views/ctr/incomeContract/index.vue
index 05b8802..d79aaa8 100644
--- a/src/views/ctr/incomeContract/index.vue
+++ b/src/views/ctr/incomeContract/index.vue
@@ -69,7 +69,7 @@
-
+
+
+ 查看承包内容
+
查看附件列表
+
From 92d8c52b181b9672e93a9eec36dacd6d8ec22569 Mon Sep 17 00:00:00 2001
From: tcy <1193318383@qq.com>
Date: Fri, 22 Aug 2025 19:43:55 +0800
Subject: [PATCH 12/17] =?UTF-8?q?feat(ctr):=20=E8=B0=83=E6=95=B4=E5=90=88?=
=?UTF-8?q?=E5=90=8C=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 在费用合同列表中添加预付款比例、尾款比例、质保金比例、付款比例等列
- 修改收入合同列表中承包内容查看按钮,改为详情按钮
- 更新招标信息选择时的数据绑定逻辑
---
src/views/ctr/expensesContract/index.vue | 5 +++++
src/views/ctr/incomeContract/index.vue | 7 ++++---
src/views/ctr/index.vue | 5 +++--
3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/views/ctr/expensesContract/index.vue b/src/views/ctr/expensesContract/index.vue
index db921b6..6ad4a81 100644
--- a/src/views/ctr/expensesContract/index.vue
+++ b/src/views/ctr/expensesContract/index.vue
@@ -18,6 +18,7 @@
+
@@ -68,6 +69,10 @@
+
+
+
+
diff --git a/src/views/ctr/incomeContract/index.vue b/src/views/ctr/incomeContract/index.vue
index d79aaa8..ee2d04e 100644
--- a/src/views/ctr/incomeContract/index.vue
+++ b/src/views/ctr/incomeContract/index.vue
@@ -79,9 +79,9 @@
-->
-
- 查看承包内容
-
+
查看附件列表
@@ -292,6 +292,7 @@ const handleShowFileList = async (row: IncomeContractVO) => {
});
}
+
onMounted(() => {
getList();
});
diff --git a/src/views/ctr/index.vue b/src/views/ctr/index.vue
index a016a40..0412f38 100644
--- a/src/views/ctr/index.vue
+++ b/src/views/ctr/index.vue
@@ -371,9 +371,10 @@ const handleChoose = async () => {
const handleChooseData = (row) => {
form.value.tenderId = row.id;
form.value.name = row.name;
- form.value.contractPrice = row.contractPrice;
+ // form.value.contractPrice = row.contractPrice;
form.value.content = row.content;
- form.value.winningBidder = row.winningBidder;
+ form.value.contractSupplier = row.winningBidder;
+ form.value.amount = row.contractPrice;
dialogVisible.value = false;
};
watch(form, (val) => {
From d45bce2ef8f8a8f06647231609c27845cfb23ee1 Mon Sep 17 00:00:00 2001
From: taoge1020
Date: Fri, 22 Aug 2025 19:48:09 +0800
Subject: [PATCH 13/17] =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.development | 2 +-
src/api/materials/materialsUseRecord/index.ts | 70 +++
src/api/materials/materialsUseRecord/types.ts | 111 ++++
src/assets/styles/ruoyi.scss | 11 +
.../biddingManagemen/appointment/index.vue | 4 +-
.../biddingManagemen/biddingLimit/index.vue | 8 +-
.../listOfWinningBids/index copy 2.vue | 524 ++++++++++++++++++
.../listOfWinningBids/index copy.vue | 344 ------------
.../listOfWinningBids/index.vue | 456 ++++++++-------
.../materialIssue/index.vue | 14 +-
.../materialIssue/word/index.vue | 36 +-
.../materials/materialsUseRecord/index.vue | 327 +++++++++++
src/views/progress/plan/index.vue | 2 +-
13 files changed, 1346 insertions(+), 563 deletions(-)
create mode 100644 src/api/materials/materialsUseRecord/index.ts
create mode 100644 src/api/materials/materialsUseRecord/types.ts
create mode 100644 src/views/biddingManagemen/listOfWinningBids/index copy 2.vue
delete mode 100644 src/views/biddingManagemen/listOfWinningBids/index copy.vue
create mode 100644 src/views/materials/materialsUseRecord/index.vue
diff --git a/.env.development b/.env.development
index b59befd..d905b86 100644
--- a/.env.development
+++ b/.env.development
@@ -5,7 +5,7 @@ VITE_APP_TITLE = 煤科建管平台
VITE_APP_ENV = 'development'
# 开发环境
-VITE_APP_BASE_API = 'http://192.168.110.180:8899'
+VITE_APP_BASE_API = 'http://192.168.110.209:8899'
# 无人机接口地址
diff --git a/src/api/materials/materialsUseRecord/index.ts b/src/api/materials/materialsUseRecord/index.ts
new file mode 100644
index 0000000..177b5b2
--- /dev/null
+++ b/src/api/materials/materialsUseRecord/index.ts
@@ -0,0 +1,70 @@
+import request from '@/utils/request';
+import { AxiosPromise } from 'axios';
+import { MaterialsUseRecordVO, MaterialsUseRecordForm, MaterialsUseRecordQuery } from '@/api/materials/materialsUseRecord/types';
+
+/**
+ * 查询材料使用登记列表
+ * @param query
+ * @returns {*}
+ */
+
+export const listMaterialsUseInventory = (query?: MaterialsUseRecordQuery): AxiosPromise => {
+ return request({
+ url: '/materials/materialsInventory/list',
+ method: 'get',
+ params: query
+ });
+};
+export const listMaterialsUseRecord = (query?: MaterialsUseRecordQuery): AxiosPromise => {
+ return request({
+ url: '/materials/materialsUseRecord/list',
+ method: 'get',
+ params: query
+ });
+};
+
+/**
+ * 查询材料使用登记详细
+ * @param id
+ */
+export const getMaterialsUseRecord = (id: string | number): AxiosPromise => {
+ return request({
+ url: '/materials/materialsUseRecord/' + id,
+ method: 'get'
+ });
+};
+
+/**
+ * 新增材料使用登记
+ * @param data
+ */
+export const addMaterialsUseRecord = (data: MaterialsUseRecordForm) => {
+ return request({
+ url: '/materials/materialsUseRecord',
+ method: 'post',
+ data: data
+ });
+};
+
+/**
+ * 修改材料使用登记
+ * @param data
+ */
+export const updateMaterialsUseRecord = (data: MaterialsUseRecordForm) => {
+ return request({
+ url: '/materials/materialsUseRecord',
+ method: 'put',
+ data: data
+ });
+};
+
+/**
+ * 删除材料使用登记
+ * @param id
+ */
+export const delMaterialsUseRecord = (id: string | number | Array) => {
+ return request({
+ url: '/materials/materialsUseRecord/' + id,
+ method: 'delete'
+ });
+};
diff --git a/src/api/materials/materialsUseRecord/types.ts b/src/api/materials/materialsUseRecord/types.ts
new file mode 100644
index 0000000..697f347
--- /dev/null
+++ b/src/api/materials/materialsUseRecord/types.ts
@@ -0,0 +1,111 @@
+export interface MaterialsUseRecordVO {
+ /**
+ * 主键ID
+ */
+ id: string | number;
+
+ /**
+ * 项目ID
+ */
+ projectId: string | number;
+
+ /**
+ * 库存ID
+ */
+ inventoryId: string | number;
+
+ /**
+ * 使用部位
+ */
+ usePart: string;
+
+ /**
+ * 使用数量
+ */
+ useNumber: number;
+
+ /**
+ * 剩余量
+ */
+ residueNumber: string | number;
+
+ /**
+ * 备注
+ */
+ remark: string;
+
+}
+
+export interface MaterialsUseRecordForm extends BaseEntity {
+ /**
+ * 主键ID
+ */
+ id?: string | number;
+
+ /**
+ * 项目ID
+ */
+ projectId?: string | number;
+
+ /**
+ * 库存ID
+ */
+ inventoryId?: string | number;
+
+ /**
+ * 使用部位
+ */
+ usePart?: string;
+
+ /**
+ * 使用数量
+ */
+ useNumber?: number;
+
+ /**
+ * 剩余量
+ */
+ residueNumber?: string | number;
+
+ /**
+ * 备注
+ */
+ remark?: string;
+
+}
+
+export interface MaterialsUseRecordQuery extends PageQuery {
+
+ /**
+ * 项目ID
+ */
+ projectId?: string | number;
+
+ /**
+ * 库存ID
+ */
+ inventoryId?: string | number;
+
+ /**
+ * 使用部位
+ */
+ usePart?: string;
+
+ /**
+ * 使用数量
+ */
+ useNumber?: number;
+
+ /**
+ * 剩余量
+ */
+ residueNumber?: string | number;
+
+ /**
+ * 日期范围参数
+ */
+ params?: any;
+}
+
+
+
diff --git a/src/assets/styles/ruoyi.scss b/src/assets/styles/ruoyi.scss
index d2ecb24..d9409ed 100644
--- a/src/assets/styles/ruoyi.scss
+++ b/src/assets/styles/ruoyi.scss
@@ -288,3 +288,14 @@ h6 {
.top-right-btn {
margin-left: auto;
}
+
+.text-two-lines {
+ display: -webkit-box; /* 触发弹性盒模型 */
+ -webkit-box-orient: vertical; /* 垂直排列文本行 */
+ -webkit-line-clamp: 2; /* 限制显示2行 */
+ /* 3. 超出部分处理 */
+ overflow: hidden; /* 隐藏超出容器的内容 */
+ text-overflow: ellipsis; /* 超出部分显示省略号 */
+ /* 可选:优化文本间距 */
+ line-height: 1.5; /* 行高,控制两行的垂直间距 */
+}
diff --git a/src/views/biddingManagemen/appointment/index.vue b/src/views/biddingManagemen/appointment/index.vue
index 7c45599..ce519ad 100644
--- a/src/views/biddingManagemen/appointment/index.vue
+++ b/src/views/biddingManagemen/appointment/index.vue
@@ -58,7 +58,7 @@ import type { ComponentInternalInstance } from 'vue';
import { useUserStoreHook } from '@/store/modules/user';
import { ElMessage, ElLoading } from 'element-plus';
import { biddingGetUser, AddbiddingUser, biddingUserList } from '@/api/bidding/appointment';
-
+import { getProject } from '@/api/project/project';
// 获取当前实例
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
// 获取用户 store
@@ -68,7 +68,7 @@ const currentProject = computed(() => userStore.selectedProject);
// 专业字典数据
const { des_user_major } = toRefs(proxy?.useDict('des_user_major'));
const isDisabled = ref(false);
-
+const projectInfo = ref({}); //项目信息
// 表单数据
const form = reactive({
id: null,
diff --git a/src/views/biddingManagemen/biddingLimit/index.vue b/src/views/biddingManagemen/biddingLimit/index.vue
index 79b4d4f..ce13de3 100644
--- a/src/views/biddingManagemen/biddingLimit/index.vue
+++ b/src/views/biddingManagemen/biddingLimit/index.vue
@@ -16,7 +16,7 @@
{{ isExpandAll ? '一键收起' : '一键展开' }}
-
+
导出excel
@@ -78,7 +78,7 @@
{{ scope.row.price }}
-
+
diff --git a/src/views/biddingManagemen/listOfWinningBids/index copy 2.vue b/src/views/biddingManagemen/listOfWinningBids/index copy 2.vue
new file mode 100644
index 0000000..1e7356c
--- /dev/null
+++ b/src/views/biddingManagemen/listOfWinningBids/index copy 2.vue
@@ -0,0 +1,524 @@
+
+
+
+
+
+
+
+
+
{{ currentProject.name }}
+
+
+
+ 负责人:
+ {{ projectInfo.principal || '-' }}
+
+
+ 负责人电话:
+ {{ projectInfo.principalPhone || '-' }}
+
+
+ 项目类型:
+ {{ getDictLabel(project_type, projectInfo.projectType) || '-' }}
+
+
+ 项目阶段:
+ {{ getDictLabel(project_stage, projectInfo.projectStage) || '-' }}
+
+
+ 开工时间:
+ {{ projectInfo.onStreamTime || '-' }}
+
+
+ 经纬度:
+ {{ projectInfo.lng || '-' }},{{ projectInfo.lat || '-' }}
+
+
+ 项目地址:
+ {{ projectInfo.projectSite || '-' }}
+
+
+ 计划容量(M):
+ {{ projectInfo.plan || '-' }}
+
+
+ 实际容量(M):
+ {{ projectInfo.actual || '-' }}
+
+
+ 设计总量(M):
+ {{ projectInfo.designTotal || '-' }}
+
+
+ 备注:
+ {{ projectInfo.remark || '-' }}
+
+
+
+
+
+ 点击编辑
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确认提交
+
+ 重置
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/biddingManagemen/listOfWinningBids/index copy.vue b/src/views/biddingManagemen/listOfWinningBids/index copy.vue
deleted file mode 100644
index cd2f39a..0000000
--- a/src/views/biddingManagemen/listOfWinningBids/index copy.vue
+++ /dev/null
@@ -1,344 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
- 重置
-
-
-
-
-
-
-
-
-
- 新增
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 修改
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/views/biddingManagemen/listOfWinningBids/index.vue b/src/views/biddingManagemen/listOfWinningBids/index.vue
index f2c7700..a7f7b43 100644
--- a/src/views/biddingManagemen/listOfWinningBids/index.vue
+++ b/src/views/biddingManagemen/listOfWinningBids/index.vue
@@ -2,18 +2,66 @@
-
+
-
-
-
{{ currentProject.name }}
-
-
- 点击编辑
-
+
+
+
{{ currentProject.name }}
+
+
+
+ 负责人:
+ {{ projectInfo.principal || '-' }}
+
+
+ 负责人电话:
+ {{ projectInfo.principalPhone || '-' }}
+
+
+ 项目类型:
+ {{ getDictLabel(project_type, projectInfo.projectType) || '-' }}
+
+
+ 项目阶段:
+ {{ getDictLabel(project_stage, projectInfo.projectStage) || '-' }}
+
+
+ 开工时间:
+ {{ projectInfo.onStreamTime || '-' }}
+
+
+ 经纬度:
+ {{ projectInfo.lng || '-' }},{{ projectInfo.lat || '-' }}
+
+
+ 项目地址:
+ {{ projectInfo.projectSite || '-' }}
+
+
+ 计划容量(M):
+ {{ projectInfo.plan || '-' }}
+
+
+ 实际容量(M):
+ {{ projectInfo.actual || '-' }}
+
+
+ 设计总量(M):
+ {{ projectInfo.designTotal || '-' }}
+
+
+ 备注:
+ {{ projectInfo.remark || '-' }}
+
+
+
+ 点击编辑
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 是
- 否
+
+
+ 中标
+ 未中标
-
-
-
+
+
+
+
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -142,125 +117,154 @@
diff --git a/src/views/materials/materialsEquipment/materialIssue/index.vue b/src/views/materials/materialsEquipment/materialIssue/index.vue
index c0c360f..b4ae57e 100644
--- a/src/views/materials/materialsEquipment/materialIssue/index.vue
+++ b/src/views/materials/materialsEquipment/materialIssue/index.vue
@@ -140,7 +140,7 @@
@@ -149,7 +149,7 @@
@@ -158,7 +158,7 @@
@@ -167,7 +167,7 @@
@@ -176,7 +176,7 @@
@@ -185,7 +185,7 @@
@@ -193,7 +193,7 @@
-
+
diff --git a/src/views/materials/materialsEquipment/materialIssue/word/index.vue b/src/views/materials/materialsEquipment/materialIssue/word/index.vue
index 4cfb5d9..7298339 100644
--- a/src/views/materials/materialsEquipment/materialIssue/word/index.vue
+++ b/src/views/materials/materialsEquipment/materialIssue/word/index.vue
@@ -54,31 +54,32 @@
- 序号 |
- 名称 |
- 规格 |
- 单位 |
- 库存 |
- 领取 |
- 剩余 |
- 备注 |
+
+ 序号 |
+ 名称 |
+ 规格 |
+ 单位 |
+ 库存 |
+ 领取 |
+ 剩余 |
+ 备注 |
- {{ i + 1 }} |
- {{ item.name }} |
- {{ item.specification }} |
- {{ item.unit }} |
- {{ item.stockQuantity }} |
- {{ item.issuedQuantity }} |
- {{ item.remainingQuantity }} |
- {{ item.remark }} |
+ {{ i + 1 }} |
+ {{ item.name }} |
+ {{ item.specification }} |
+ {{ item.unit }} |
+ {{ item.stockQuantity }} |
+ {{ item.issuedQuantity }} |
+ {{ item.remainingQuantity }} |
+ {{ item.remark }} |
-
+ |
缺陷情况:
{{ formData.defectDescription }}
|
@@ -296,5 +297,6 @@ tbody {
box-shadow: 0px 0px 10px #ddd;
padding: 20px;
position: relative;
+ /* overflow: auto; */
}
diff --git a/src/views/materials/materialsUseRecord/index.vue b/src/views/materials/materialsUseRecord/index.vue
new file mode 100644
index 0000000..c4a7866
--- /dev/null
+++ b/src/views/materials/materialsUseRecord/index.vue
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加登记
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/progress/plan/index.vue b/src/views/progress/plan/index.vue
index 2f22b3f..822c6cb 100644
--- a/src/views/progress/plan/index.vue
+++ b/src/views/progress/plan/index.vue
@@ -288,7 +288,7 @@ const getList = async () => {
matrixOptions.value = matrixList;
queryParams.value.matrixId = matrixList[0].children[0].matrixId;
} catch (error) {
- proxy?.$modal.msgError('获取方阵失败');
+ // proxy?.$modal.msgError('获取方阵失败');
}
}
}
From 9584ab4baaee4475868e5a21c3f06fbef73bc95a Mon Sep 17 00:00:00 2001
From: Teo <2642673902@qq.com>
Date: Fri, 22 Aug 2025 19:53:14 +0800
Subject: [PATCH 14/17] =?UTF-8?q?=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.development | 5 +-
src/api/progress/progressCategory/index.ts | 9 +
src/utils/request.ts | 4 +-
src/views/progress/progressCategory/index.vue | 21 +-
src/views/tender/bidd/index.vue | 19 +-
src/views/tender/bidd/indexEdit.vue | 358 ++++++++++++++++++
src/views/tender/plan/index.vue | 3 +-
7 files changed, 408 insertions(+), 11 deletions(-)
create mode 100644 src/views/tender/bidd/indexEdit.vue
diff --git a/.env.development b/.env.development
index 4b01d87..97d3ec6 100644
--- a/.env.development
+++ b/.env.development
@@ -6,14 +6,15 @@ VITE_APP_ENV = 'development'
# 开发环境
# 李陈杰 209
-VITE_APP_BASE_API = 'http://192.168.110.209:8899'
+# VITE_APP_BASE_API = 'http://192.168.110.209:8899'
# 曾涛
# VITE_APP_BASE_API = 'http://192.168.110.180:8899'
# 罗成
# VITE_APP_BASE_API = 'http://192.168.110.213:8899'
# 朱银
# VITE_APP_BASE_API = 'http://192.168.110.149:8899'
-# VITE_APP_BASE_API = 'http://192.168.110.209:8899'
+#屈展航
+VITE_APP_BASE_API = 'http://192.168.110.210:8899'
# VITE_APP_BASE_API = 'http://192.168.110.209:8899'
# 无人机接口地址
diff --git a/src/api/progress/progressCategory/index.ts b/src/api/progress/progressCategory/index.ts
index d525264..ed4bb07 100644
--- a/src/api/progress/progressCategory/index.ts
+++ b/src/api/progress/progressCategory/index.ts
@@ -61,3 +61,12 @@ export const delProgressCategory = (id: string | number | Array
method: 'delete'
});
};
+
+//下载
+export const downloadProgressCategory = (data) => {
+ return request({
+ url: '/progress/progressCategory/export',
+ method: 'post',
+ data
+ });
+};
diff --git a/src/utils/request.ts b/src/utils/request.ts
index 288b711..266d4be 100644
--- a/src/utils/request.ts
+++ b/src/utils/request.ts
@@ -176,7 +176,7 @@ service.interceptors.response.use(
}
);
// 通用下载方法
-export function download(url: string, params: any, fileName: string) {
+export function download(url: string, params: any, fileName: string, isHeader) {
downloadLoadingInstance = ElLoading.service({ text: '正在下载数据,请稍候', background: 'rgba(0, 0, 0, 0.7)' });
// prettier-ignore
return service.post(url, params, {
@@ -186,7 +186,7 @@ export function download(url: string, params: any, fileName: string) {
return tansParams(params);
}
],
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+ headers: isHeader?{}:{ 'Content-Type': 'application/x-www-form-urlencoded' },
responseType: 'blob'
}).then(async (resp: any) => {
const isLogin = blobValidate(resp);
diff --git a/src/views/progress/progressCategory/index.vue b/src/views/progress/progressCategory/index.vue
index bb8b8db..3af2da8 100644
--- a/src/views/progress/progressCategory/index.vue
+++ b/src/views/progress/progressCategory/index.vue
@@ -8,6 +8,7 @@
新增
+
+ 导出
+
展开/折叠
@@ -144,10 +148,12 @@ import {
getProgressCategory,
delProgressCategory,
addProgressCategory,
- updateProgressCategory
+ updateProgressCategory,
+ downloadProgressCategory
} from '@/api/progress/progressCategory';
import { ProgressCategoryVO, ProgressCategoryQuery, ProgressCategoryForm } from '@/api/progress/progressCategory/types';
import { useUserStoreHook } from '@/store/modules/user';
+import { download } from '@/utils/request';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { progress_unit_type, progress_work_type } = toRefs(proxy?.useDict('progress_unit_type', 'progress_work_type'));
@@ -161,7 +167,7 @@ type ProgressCategoryOption = {
name: string;
children?: ProgressCategoryOption[];
};
-
+const treeRef = ref();
const matrixOptions = ref([]);
const progressCategoryList = ref([]);
@@ -236,6 +242,7 @@ const data = reactive>({
});
const { queryParams, form, rules } = toRefs(data);
+const matrixIdList = ref([]);
/** 查询分项工程单价列表 */
const getList = async () => {
@@ -252,7 +259,6 @@ const getList = async () => {
});
if (!matrixValue.value) matrixValue.value = matrixList[0].id;
matrixOptions.value = matrixList;
- console.log('🚀 ~ getList ~ matrixList:', matrixList);
queryParams.value.matrixId = matrixList[0].children[0].matrixId;
form.value.projectId = matrixList[0].projectId;
form.value.matrixId = matrixList[0].children[0].matrixId;
@@ -300,9 +306,7 @@ const reset = () => {
const handleChange = (value: number) => {
form.value.matrixId = value[1];
form.value.projectId = value[0];
-
queryParams.value.matrixId = value[1];
-
getList();
};
@@ -361,6 +365,13 @@ const handleUpdate = async (row: ProgressCategoryVO) => {
dialog.title = '修改分项工程单价';
};
+const handleExport = async () => {
+ const ids = treeRef.value.getCheckedNodes()[0].pathNodes[0].childrenData.map((item) => item.matrixId);
+ const res = await downloadProgressCategory({ ids });
+ download('/progress/progressCategory/export', { ids }, '方阵.xlsx', true);
+ // window.open(res.data);
+};
+
/** 提交按钮 */
const submitForm = () => {
progressCategoryFormRef.value?.validate(async (valid: boolean) => {
diff --git a/src/views/tender/bidd/index.vue b/src/views/tender/bidd/index.vue
index 8df76ed..e476fe7 100644
--- a/src/views/tender/bidd/index.vue
+++ b/src/views/tender/bidd/index.vue
@@ -37,6 +37,9 @@
导出excel
+
+ 审核
+
@@ -104,6 +107,8 @@ const queryForm = ref({
sheet: ''
});
+const versionsData = ref({});
+
const activeTab = ref('2');
const sheets = ref([]);
const options = ref([]);
@@ -118,7 +123,8 @@ const handleTabChange = (tab: string) => {
getVersionNums();
};
//切换版本
-const changeVersions = () => {
+const changeVersions = (value) => {
+ versionsData.value = options.value.find((item) => item.versions == value);
getSheetName();
};
//切换表格
@@ -148,6 +154,8 @@ const getVersionNums = async () => {
options.value = res.data;
if (res.data.length > 0) {
queryForm.value.versions = res.data[0].versions;
+ versionsData.value = options.value.find((item) => item.versions == queryForm.value.versions);
+ console.log('🚀 ~ changeVersions ~ versionsData.value:', versionsData.value);
getSheetName();
} else {
queryForm.value.versions = '';
@@ -261,6 +269,15 @@ const handleSave = (row: any) => {
loading.value = false;
}
};
+
+/** 审核按钮操作 */
+const handleAudit = async () => {
+ proxy?.$tab.openPage('/approval/tenderPlan/indexEdit', '审核招标一览', {
+ id: queryForm.value.versions,
+ type: 'update'
+ });
+};
+
//监听项目id刷新数据
const listeningProject = watch(
() => currentProject.value?.id,
diff --git a/src/views/tender/bidd/indexEdit.vue b/src/views/tender/bidd/indexEdit.vue
new file mode 100644
index 0000000..e92d56a
--- /dev/null
+++ b/src/views/tender/bidd/indexEdit.vue
@@ -0,0 +1,358 @@
+
+
+
+
+
+
+
+
+
+
+
施工产值
+
+
+
+
+
+
+
+
+
+ (scope.row.unitPrice = val)"
+ :precision="2"
+ :step="0.1"
+ :controls="false"
+ v-if="scope.row.quantity && scope.row.quantity != 0"
+ />
+
+
+
+
+ {{ scope.row.price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/tender/plan/index.vue b/src/views/tender/plan/index.vue
index 7fd28de..01b093b 100644
--- a/src/views/tender/plan/index.vue
+++ b/src/views/tender/plan/index.vue
@@ -94,6 +94,7 @@
v-hasPermi="['tender:segmentedIndicatorPlanning:getMore']"
>详情
+
userStore.selectedProject);
const tabList = ref([]);
From 5258b37d07521fb0faf2da5af59fc6a4b5856424 Mon Sep 17 00:00:00 2001
From: taoge1020
Date: Fri, 22 Aug 2025 22:52:29 +0800
Subject: [PATCH 15/17] =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.development | 2 +-
src/components/FileUpload/index.vue | 60 ++++--
.../biddingManagemen/biddingLimit/index.vue | 4 +-
.../listOfWinningBids/index.vue | 191 +++++++++++++++---
4 files changed, 206 insertions(+), 51 deletions(-)
diff --git a/.env.development b/.env.development
index d905b86..6e07116 100644
--- a/.env.development
+++ b/.env.development
@@ -5,7 +5,7 @@ VITE_APP_TITLE = 煤科建管平台
VITE_APP_ENV = 'development'
# 开发环境
-VITE_APP_BASE_API = 'http://192.168.110.209:8899'
+VITE_APP_BASE_API = 'http://192.168.110.149:8899'
# 无人机接口地址
diff --git a/src/components/FileUpload/index.vue b/src/components/FileUpload/index.vue
index 8bfd847..5011b9d 100644
--- a/src/components/FileUpload/index.vue
+++ b/src/components/FileUpload/index.vue
@@ -1,11 +1,28 @@
-
+
@@ -24,10 +41,14 @@
的文件
-
-
+
+
{{ getFileName(file.name) }}
@@ -180,13 +201,16 @@ watch(
},
{ deep: true, immediate: true }
);
-watch(() => props.defaultFileList, () => {
- if (props.defaultFileList.length === 0) return;
- props.defaultFileList.forEach((item: any) => {
- fileList.value.push(item);
- });
-
-}, { deep: true, immediate: true });
+watch(
+ () => props.defaultFileList,
+ () => {
+ if (props.defaultFileList.length === 0) return;
+ props.defaultFileList.forEach((item: any) => {
+ fileList.value.push(item);
+ });
+ },
+ { deep: true, immediate: true }
+);
// 上传前校检格式和大小
const handleBeforeUpload = (file: any) => {
// 校检文件类型
@@ -424,7 +448,7 @@ defineExpose({ submitUpload });
}
}
- >span {
+ > span {
width: 100%;
}
}
diff --git a/src/views/biddingManagemen/biddingLimit/index.vue b/src/views/biddingManagemen/biddingLimit/index.vue
index ea9359d..ce13de3 100644
--- a/src/views/biddingManagemen/biddingLimit/index.vue
+++ b/src/views/biddingManagemen/biddingLimit/index.vue
@@ -32,7 +32,7 @@
导出excel
-
+
diff --git a/src/views/biddingManagemen/listOfWinningBids/index.vue b/src/views/biddingManagemen/listOfWinningBids/index.vue
index a7f7b43..9ea8b22 100644
--- a/src/views/biddingManagemen/listOfWinningBids/index.vue
+++ b/src/views/biddingManagemen/listOfWinningBids/index.vue
@@ -89,8 +89,106 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -122,14 +220,20 @@ import { ListOfWinningBidsForm } from '@/api/bidding/listOfWinningBids/types';
import { useUserStoreHook } from '@/store/modules/user';
import { ElFormInstance, ElMessage } from 'element-plus';
import { getProject, updateProject } from '@/api/project/project';
-
+import { globalHeaders } from '@/utils/request';
+import type { UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
+import { genFileId } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { project_type, project_stage } = toRefs(proxy?.useDict('project_type', 'project_stage'));
-
+const headers = ref(globalHeaders());
+const fileList = ref([]);
// 用户状态管理与当前项目
const userStore = useUserStoreHook();
const currentProject = computed(() => userStore.selectedProject);
-
+// const realUploadUrl = computed(() => {
+// const search = new URLSearchParams().toString();
+// return search ? `${baseUrl}${props.uploadUrl}?${search}` : `${baseUrl}${props.uploadUrl}`;
+// });
// 项目信息(仅展示,非表单编辑)
const projectInfo = reactive({
principal: undefined,
@@ -151,17 +255,29 @@ const projectInfo = reactive({
const listOfWinningBidsFormRef = ref();
const buttonLoading = ref(false);
const isDisabled = ref(false);
-
-// 表单初始数据
+const fileObj = ref({
+ bidFile: undefined,
+ bidFileName: undefined
+});
+// 表单初始数据(新增招标相关参数)
const initFormData = {
id: undefined,
projectId: currentProject.value?.id,
whetherBid: '1', // 是否中标:0=中标,1=未中标
bidPrice: undefined, // 中标价(人民币)
- bidFile: undefined // 中标通知书
+ bidFileId: undefined, // 中标通知书
+ biddingAgency: undefined, //招标代理机构
+ tenderer: undefined, //招标人
+ biddingDeadline: undefined, //投标截止时间
+ bidopeningTime: undefined, //开标时间
+ projectOverview: undefined, //项目概况
+ constructionsite: undefined, //建设地点
+ planDuration: undefined, //计划工期
+ answeringDeadlineTime: undefined, //答疑截止时间
+ clarifyDeadlineTime: undefined //澄清截止时间
};
-// 表单数据与验证规则(核心:是否中标/中标价/中标通知书均设为必填)
+// 表单数据与验证规则(核心:是否中标/中标价/中标通知书均设为必填,新增参数添加基础验证)
const data = reactive({
form: { ...initFormData } as ListOfWinningBidsForm,
rules: {
@@ -187,7 +303,7 @@ const data = reactive({
}
],
// 中标通知书:仅中标时必填
- bidFile: [
+ bidFileId: [
{
required: true,
message: '请上传中标通知书',
@@ -199,7 +315,25 @@ const data = reactive({
callback();
}
}
- ]
+ ],
+ // 招标代理机构:必填
+ biddingAgency: [{ required: true, message: '请输入招标代理机构', trigger: 'blur' }],
+ // 招标人:必填
+ tenderer: [{ required: true, message: '请输入招标人', trigger: 'blur' }],
+ // 投标截止时间:必填
+ biddingDeadline: [{ required: true, message: '请选择投标截止时间', trigger: 'change' }],
+ // 开标时间:必填
+ bidopeningTime: [{ required: true, message: '请选择开标时间', trigger: 'change' }],
+ // 项目概况:必填
+ projectOverview: [{ required: true, message: '请输入项目概况', trigger: 'blur' }],
+ // 建设地点:必填
+ constructionsite: [{ required: true, message: '请输入建设地点', trigger: 'blur' }],
+ // 计划工期:必填
+ planDuration: [{ required: true, message: '请输入计划工期', trigger: 'blur' }],
+ // 答疑截止时间:必填
+ answeringDeadlineTime: [{ required: true, message: '请选择答疑截止时间', trigger: 'change' }],
+ // 澄清截止时间:必填
+ clarifyDeadlineTime: [{ required: true, message: '请选择澄清截止时间', trigger: 'change' }]
} as Record
});
@@ -213,7 +347,18 @@ const getDictLabel = (dictList: any[], value: any) => {
const dictItem = dictList.find((item) => item.value === value);
return dictItem ? dictItem.label : '';
};
+const handleUploadSuccess = (val) => {
+ fileObj.value.bidFile = val.url;
+ fileObj.value.bidFileName = val.fileName;
+};
+const upload = ref();
+const handleExceed: UploadProps['onExceed'] = (files) => {
+ upload.value!.clearFiles();
+ const file = files[0] as UploadRawFile;
+ file.uid = genFileId();
+ upload.value!.handleStart(file);
+};
/**
* 初始化中标数据(根据项目ID查询已有记录)
*/
@@ -221,6 +366,7 @@ const initData = async () => {
try {
if (currentProject.value?.id) {
const res = await listListOfWinningBids({ projectId: currentProject.value.id });
+ console.log(res);
if (res.code === 200) {
resetForm();
if (res.data) {
@@ -240,7 +386,7 @@ const initData = async () => {
/**
* 提交表单(含项目信息更新+中标信息提交)
*/
-const submitForm = () => {
+const submitForm = async () => {
listOfWinningBidsFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
@@ -248,26 +394,10 @@ const submitForm = () => {
// 1. 同步项目ID和名称
form.value.projectId = currentProject.value?.id;
form.value.projectName = projectInfo.projectName;
-
- // 2. 更新项目基础信息(若有变更)
- if (currentProject.value?.id) {
- await updateProject({ id: currentProject.value.id, ...projectInfo });
- }
-
- // 3. 提交中标信息(新增/编辑)
- const isEdit = !!form.value.id;
- if (isEdit) {
- await updateListOfWinningBids(form.value);
- } else {
- await addListOfWinningBids(form.value);
- }
-
+ await addListOfWinningBids({ ...form.value, ...projectInfo });
// 4. 提交成功后切换为查看状态
isDisabled.value = true;
- ElMessage.success(isEdit ? '编辑成功' : '提交成功');
- } catch (error) {
- ElMessage.error('提交失败,请重试');
- console.error('提交表单失败:', error);
+ ElMessage.success('提交成功');
} finally {
buttonLoading.value = false;
}
@@ -282,6 +412,7 @@ const getProjectDetail = async () => {
try {
if (currentProject.value?.id) {
const res = await getProject(currentProject.value.id);
+
Object.assign(projectInfo, res.data);
}
} catch (error) {
From ea56d292ecb3972f242817ec7a52216aeed870c5 Mon Sep 17 00:00:00 2001
From: Teo <2642673902@qq.com>
Date: Fri, 22 Aug 2025 22:57:45 +0800
Subject: [PATCH 16/17] =?UTF-8?q?=E6=8B=9B=E6=A0=87=E4=B8=80=E8=A7=88?=
=?UTF-8?q?=E5=AE=A1=E6=A0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.development | 4 +-
src/api/tender/index.ts | 9 ++
src/utils/request.ts | 17 ++--
src/views/progress/progressCategory/index.vue | 12 ++-
src/views/tender/bidd/index.vue | 8 +-
src/views/tender/bidd/indexEdit.vue | 90 ++++++++++++-------
6 files changed, 93 insertions(+), 47 deletions(-)
diff --git a/.env.development b/.env.development
index 97d3ec6..7203b00 100644
--- a/.env.development
+++ b/.env.development
@@ -12,9 +12,9 @@ VITE_APP_ENV = 'development'
# 罗成
# VITE_APP_BASE_API = 'http://192.168.110.213:8899'
# 朱银
-# VITE_APP_BASE_API = 'http://192.168.110.149:8899'
+VITE_APP_BASE_API = 'http://192.168.110.149:8899'
#屈展航
-VITE_APP_BASE_API = 'http://192.168.110.210:8899'
+# VITE_APP_BASE_API = 'http://192.168.110.210:8899'
# VITE_APP_BASE_API = 'http://192.168.110.209:8899'
# 无人机接口地址
diff --git a/src/api/tender/index.ts b/src/api/tender/index.ts
index 4c367c5..fd5a8ec 100644
--- a/src/api/tender/index.ts
+++ b/src/api/tender/index.ts
@@ -113,3 +113,12 @@ export const getUnitList = (query: any): AxiosPromise => {
params: query
});
};
+
+//获取审核状态
+export const getApproval = (id) => {
+ return request({
+ url: '/tender/tenderPlanLimitList/getVersionDetail',
+ method: 'get',
+ params: { versions: id }
+ });
+};
diff --git a/src/utils/request.ts b/src/utils/request.ts
index 266d4be..0ff507c 100644
--- a/src/utils/request.ts
+++ b/src/utils/request.ts
@@ -176,22 +176,26 @@ service.interceptors.response.use(
}
);
// 通用下载方法
-export function download(url: string, params: any, fileName: string, isHeader) {
+export function download(url: string, params: any, fileName: string, isHeader?: boolean) {
downloadLoadingInstance = ElLoading.service({ text: '正在下载数据,请稍候', background: 'rgba(0, 0, 0, 0.7)' });
// prettier-ignore
- return service.post(url, params, {
+ let data={
transformRequest: [
(params: any) => {
return tansParams(params);
}
],
- headers: isHeader?{}:{ 'Content-Type': 'application/x-www-form-urlencoded' },
+ headers: isHeader?{'Content-Type': 'application/json'}:{ 'Content-Type': 'application/x-www-form-urlencoded' },
responseType: 'blob'
- }).then(async (resp: any) => {
+ }
+ if (isHeader) delete data.transformRequest;
+ return service
+ .post(url, params, data as any)
+ .then(async (resp: any) => {
const isLogin = blobValidate(resp);
if (isLogin) {
- console.log("🚀 ~ download ~ resp:", resp)
+ console.log('🚀 ~ download ~ resp:', resp);
const blob = new Blob([resp]);
FileSaver.saveAs(blob, fileName);
} else {
@@ -201,7 +205,8 @@ export function download(url: string, params: any, fileName: string, isHeader) {
ElMessage.error(errMsg);
}
downloadLoadingInstance.close();
- }).catch((r: any) => {
+ })
+ .catch((r: any) => {
console.error(r);
ElMessage.error('下载文件出现错误,请联系管理员!');
downloadLoadingInstance.close();
diff --git a/src/views/progress/progressCategory/index.vue b/src/views/progress/progressCategory/index.vue
index 3af2da8..affd541 100644
--- a/src/views/progress/progressCategory/index.vue
+++ b/src/views/progress/progressCategory/index.vue
@@ -153,7 +153,6 @@ import {
} from '@/api/progress/progressCategory';
import { ProgressCategoryVO, ProgressCategoryQuery, ProgressCategoryForm } from '@/api/progress/progressCategory/types';
import { useUserStoreHook } from '@/store/modules/user';
-import { download } from '@/utils/request';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { progress_unit_type, progress_work_type } = toRefs(proxy?.useDict('progress_unit_type', 'progress_work_type'));
@@ -367,9 +366,14 @@ const handleUpdate = async (row: ProgressCategoryVO) => {
const handleExport = async () => {
const ids = treeRef.value.getCheckedNodes()[0].pathNodes[0].childrenData.map((item) => item.matrixId);
- const res = await downloadProgressCategory({ ids });
- download('/progress/progressCategory/export', { ids }, '方阵.xlsx', true);
- // window.open(res.data);
+ proxy?.download(
+ '/progress/progressCategory/export',
+ {
+ ids: ids
+ },
+ `qualityInspection_${new Date().getTime()}.xlsx`,
+ true
+ );
};
/** 提交按钮 */
diff --git a/src/views/tender/bidd/index.vue b/src/views/tender/bidd/index.vue
index e476fe7..b0a7cab 100644
--- a/src/views/tender/bidd/index.vue
+++ b/src/views/tender/bidd/index.vue
@@ -107,7 +107,7 @@ const queryForm = ref({
sheet: ''
});
-const versionsData = ref({});
+const versionsData = ref({});
const activeTab = ref('2');
const sheets = ref([]);
@@ -272,9 +272,11 @@ const handleSave = (row: any) => {
/** 审核按钮操作 */
const handleAudit = async () => {
- proxy?.$tab.openPage('/approval/tenderPlan/indexEdit', '审核招标一览', {
+ proxy?.$tab.openPage('/approval/tenderBidd/indexEdit', '审核招标一览', {
id: queryForm.value.versions,
- type: 'update'
+ type: 'update',
+ activeTab: activeTab.value,
+ status: versionsData.value.status
});
};
diff --git a/src/views/tender/bidd/indexEdit.vue b/src/views/tender/bidd/indexEdit.vue
index e92d56a..1a0b993 100644
--- a/src/views/tender/bidd/indexEdit.vue
+++ b/src/views/tender/bidd/indexEdit.vue
@@ -9,14 +9,14 @@
@handleApprovalRecord="handleApprovalRecord"
:buttonLoading="buttonLoading"
:id="form.id"
- :status="form.auditStatus"
+ :status="form.status"
:pageType="routeParams.type"
/>
-
施工产值
+ 招标一览
@@ -24,18 +24,7 @@
-
-
- (scope.row.unitPrice = val)"
- :precision="2"
- :step="0.1"
- :controls="false"
- v-if="scope.row.quantity && scope.row.quantity != 0"
- />
-
-
+
{{ scope.row.price }}
@@ -90,6 +79,8 @@ const { design_change_reason_type } = toRefs(proxy?.useDict('design_change_
import { getKnowledgeDocument } from '@/api/design/technicalStandard';
import { getConstructionValue } from '@/api/out/constructionValue';
import { workScheduleListDetail } from '@/api/progress/plan';
+import { sheetList } from '@/api/contract';
+import { getApproval, getTableList } from '@/api/tender';
// 获取用户 store
const userStore = useUserStoreHook();
// 从 store 中获取项目列表和当前选中的项目
@@ -111,11 +102,15 @@ const approvalRecordRef = ref>();
//按钮组件
const flowCodeOptions = [
{
- value: currentProject.value?.id + '_constructionValue',
- label: '施工产值审批'
+ value: currentProject.value?.id + '_bLimitEquipmentList',
+ label: '招标一览审批'
}
];
-
+const sheets = ref([]);
+const queryForm = ref({
+ versions: '',
+ sheet: ''
+});
const leaveFormRef = ref();
const dialog = reactive({
visible: false,
@@ -133,17 +128,10 @@ const taskVariables = ref>({});
const initFormData = {
id: undefined,
projectId: currentProject.value?.id,
- matrixName: undefined,
- progressCategoryName: undefined,
- artificialNum: undefined,
- planNum: undefined,
- planDate: undefined,
- uavNum: undefined,
- confirmNum: undefined,
- outValue: undefined,
- reportDate: undefined,
- reportDateId: undefined,
- auditStatus: undefined
+ versions: undefined,
+ sheet: undefined,
+ type: undefined,
+ status: undefined
};
const data = reactive({
form: { ...initFormData },
@@ -164,12 +152,43 @@ const reset = () => {
};
/** 获取详情 */
-const getInfo = () => {
+const getInfo = async () => {
loading.value = true;
buttonLoading.value = false;
nextTick(async () => {
- const res = await getConstructionValue(routeParams.value.id);
- Object.assign(form.value, res.data);
+ try {
+ const params = {
+ projectId: currentProject.value?.id,
+ versions: form.value.versions
+ };
+ const res = await sheetList(params);
+ if (res.code == 200) {
+ sheets.value = res.data;
+ if (res.data.length > 0) {
+ queryForm.value.sheet = res.data[0];
+ } else {
+ queryForm.value.sheet = '';
+ }
+ try {
+ const res = await getTableList(form.value);
+ if (res.code == 200) {
+ tableData.value = res.data;
+ }
+ } catch (error) {
+ console.log(error);
+ }
+ }
+ } catch (error) {
+ console.log(error);
+ }
+ getApproval(form.value.versions).then((res) => {
+ form.value.status = res.data.status;
+ });
+ if (routeParams.value.type === 'approval') {
+ form.value.id = routeParams.value.id;
+ } else {
+ form.value.id = routeParams.value.id + '_' + routeParams.value.activeTab;
+ }
loading.value = false;
buttonLoading.value = false;
});
@@ -227,7 +246,7 @@ const submit = async (status, data) => {
proxy.$tab.closePage(proxy.$route);
proxy.$router.go(-1);
} else {
- if ((form.value.auditStatus === 'draft' && (flowCode.value === '' || flowCode.value === null)) || routeParams.value.type === 'add') {
+ if ((form.value.status === 'draft' && (flowCode.value === '' || flowCode.value === null)) || routeParams.value.type === 'add') {
flowCode.value = flowCodeOptions[0].value;
dialogVisible.visible = true;
return;
@@ -247,6 +266,13 @@ onMounted(() => {
reset();
loading.value = false;
if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') {
+ if (routeParams.value.type === 'approval') {
+ form.value.versions = routeParams.value.id.split('_')[0];
+ form.value.type = routeParams.value.id.split('_')[1];
+ } else {
+ form.value.versions = routeParams.value.id;
+ form.value.type = routeParams.value.activeTab;
+ }
getInfo();
}
});
From b4113bdf2ac847b03399fc45d116e38982774967 Mon Sep 17 00:00:00 2001
From: taoge1020
Date: Fri, 22 Aug 2025 23:16:19 +0800
Subject: [PATCH 17/17] =?UTF-8?q?=E9=99=90=E4=BB=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.development | 2 +-
src/views/contract/division/index.vue | 2 +-
src/views/contract/limitPrice/index.vue | 14 +-
src/views/contract/limitPrice/indexEdit.vue | 369 ++++++++++++++++++++
4 files changed, 384 insertions(+), 3 deletions(-)
create mode 100644 src/views/contract/limitPrice/indexEdit.vue
diff --git a/.env.development b/.env.development
index b7dcd4d..1976a38 100644
--- a/.env.development
+++ b/.env.development
@@ -8,7 +8,7 @@ VITE_APP_ENV = 'development'
#朱银
# VITE_APP_BASE_API = 'http://192.168.110.149:8899'
#曾涛
-VITE_APP_BASE_API = 'http://192.168.110.180:8899'
+VITE_APP_BASE_API = 'http://192.168.110.149:8899'
# 无人机接口地址
diff --git a/src/views/contract/division/index.vue b/src/views/contract/division/index.vue
index 57e007c..f78dd09 100644
--- a/src/views/contract/division/index.vue
+++ b/src/views/contract/division/index.vue
@@ -37,7 +37,7 @@
>详情
修改确定
删除
导出excel
+
+ 审核
+
+
+ 查看流程
+
@@ -131,7 +137,12 @@ const getVersionNums = async () => {
}
};
//选择版本号
-const changeVersions = () => {
+const changeVersions = (val) => {
+ options.value.forEach((item) => {
+ if (item.versions == val) {
+ reviewStatus.value = item.status;
+ }
+ });
getSheetName();
};
@@ -283,6 +294,7 @@ const clickApprovalSheet = () => {
};
onUnmounted(() => {
listeningProject();
+ console.log(11111111);
});
onMounted(() => {
getVersionNums();
diff --git a/src/views/contract/limitPrice/indexEdit.vue b/src/views/contract/limitPrice/indexEdit.vue
new file mode 100644
index 0000000..d4e32da
--- /dev/null
+++ b/src/views/contract/limitPrice/indexEdit.vue
@@ -0,0 +1,369 @@
+
+
+
+
+
+
+
+
+
+
+
合同限价审核
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+