This commit is contained in:
ljx
2025-08-28 18:20:24 +08:00
parent 2b25709c14
commit c0338033b4
5 changed files with 215 additions and 239 deletions

View File

@ -6,15 +6,15 @@ VITE_APP_ENV = 'development'
# 开发环境 # 开发环境
# 李陈杰 209 # 李陈杰 209
VITE_APP_BASE_API = 'http://192.168.110.180:8899' # VITE_APP_BASE_API = 'http://192.168.110.180:8899'
# 曾涛 # 曾涛
# VITE_APP_BASE_API = 'http://192.168.110.180: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.213:8899'
# 朱银 # 朱银
# VITE_APP_BASE_API = 'http://192.168.110.180:8899' # VITE_APP_BASE_API = 'http://192.168.110.180:8899'
#曾涛
# VITE_APP_BASE_API = 'http://192.168.110.171:8899' VITE_APP_BASE_API = 'http://192.168.110.149:8899'
# 无人机接口地址 # 无人机接口地址

View File

@ -118,7 +118,8 @@
<el-table-column prop="name" label="工程或费用名称" /> <el-table-column prop="name" label="工程或费用名称" />
<el-table-column prop="unit" label="单位" /> <el-table-column prop="unit" label="单位" />
<!-- <el-table-column prop="quantity" label="数量" /> --> <!-- <el-table-column prop="quantity" label="数量" /> -->
<el-table-column prop="selectNum" label="选择数量" align="center"> <el-table-column prop="quantity" label="计划量" align="center" />
<el-table-column prop="selectNum" label="设计量" align="center">
<template #default="scope"> <template #default="scope">
<el-input-number <el-input-number
:model-value="scope.row.selectNum" :model-value="scope.row.selectNum"
@ -132,16 +133,36 @@
:step="1" :step="1"
:controls="false" :controls="false"
:max="Math.floor(scope.row.quantity)" :max="Math.floor(scope.row.quantity)"
v-if="scope.row.quantity && scope.row.quantity != 0" v-if="scope.row.quantity && scope.row.quantity != 0 && scope.row.unitPrice"
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="unitPrice" label="单价" align="center" />
<!-- <el-table-column prop="price" label="总价" align="center"> <el-table-column prop="useQuantity" label="剩余量" align="center">
<template #default="scope"> <template #default="scope">
{{ scope.row.price }} {{
(scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) == 0
? ''
: (scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)
}}
</template> </template>
</el-table-column> --> </el-table-column>
<el-table-column prop="unitPrice" label="单价" align="center" />
<el-table-column prop="price" label="总价" align="center">
<template #default="scope">
{{
((scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)) *
Number(scope.row.unitPrice) ==
0
? ''
: (
((scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)) *
Number(scope.row.unitPrice)
).toFixed(2)
}}
</template>
</el-table-column>
</el-table> </el-table>
</el-col> </el-col>
</el-row> </el-row>

View File

@ -1,245 +1,78 @@
<template> <template>
<div class="p-2"> <el-dialog v-model="dialogVisible" title="招标文件" width="500" draggable>
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <el-form ref="ruleFormRef" style="max-width: 600px" :model="ruleForm" :rules="rules" label-width="auto">
<el-card shadow="always"> <el-form-item label="招标文件" prop="name">
<el-form :model="queryForm" :inline="true"> <file-upload
<el-form-item label="表名" prop="sheet"> v-model="form.costEstimationFile"
<el-select v-model="queryForm.sheet" placeholder="选择表名" @change="changeSheet"> :fileSize="100"
<el-option v-for="item in sheets" :key="item" :label="item" :value="item" /> :auto-upload="false"
</el-select> uploadUrl="/tender/biddingPlan/uploadBiddingDocuments"
</el-form-item> method="put"
<el-form-item> ref="fileUploadRef"
<el-button type="primary" @click="toggleExpandAll">{{ isExpandAll ? '一键收起' : '一键展开' }}</el-button> :data="{
</el-form-item> projectId: currentProject?.id,
<el-form-item> type: planType,
<el-upload fileType: '1',
ref="uploadRef" bidStatus: '0',
class="upload-demo" id: row.id
:http-request="importExcel" }"
:show-file-list="false" showFileList
v-hasPermi="['bidding:biddingLimitList:importExcelFile']" />
>
<template #trigger>
<el-button type="primary">导入excel</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleExport()" v-hasPermi="['bidding:biddingLimitList:export']">导出excel</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> <template #footer>
</transition> <div class="dialog-footer">
<el-card shadow="never" class="mb8"> <el-button @click="closeDialog()"> 取消 </el-button>
<el-table ref="tableRef" v-loading="loading" :data="tableData" row-key="id" border lazy default-expand-all> <el-button type="primary" @click="submitForm()">确定</el-button>
<el-table-column prop="num" label="编号" />
<el-table-column prop="name" label="工程或费用名称" />
<el-table-column prop="unit" label="单位" />
<el-table-column prop="quantity" label="数量" />
<el-table-column prop="remark" label="单价" align="center">
<template #default="scope">
<el-input-number
:model-value="scope.row.unitPrice"
@change="(val) => (scope.row.unitPrice = val)"
:precision="2"
:step="0.1"
:controls="false"
v-if="scope.row.quantity && scope.row.quantity != 0"
/>
</template>
</el-table-column>
<el-table-column prop="price" label="总价" align="center">
<template #default="scope">
{{ scope.row.price }}
</template>
</el-table-column>
<el-table-column prop="price" label="操作" align="center">
<template #default="scope">
<el-button
type="primary"
size="small"
@click="handleSave(scope.row)"
v-if="scope.row.quantity && scope.row.quantity != 0"
v-hasPermi="['bidding:biddingLimitList:edit']"
>修改</el-button
>
</template>
</el-table-column>
</el-table>
</el-card>
</div> </div>
</template>
</el-dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { useUserStoreHook } from '@/store/modules/user'; import { useUserStoreHook } from '@/store/modules/user';
import { obtainAllVersionNumbers } from '@/api/contract/index';
import { BiddingImportExcelFile, getTreeLimit, biddingLimitListUpdate, sheetList } from '@/api/bidding/biddingLimit';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const userStore = useUserStoreHook(); const userStore = useUserStoreHook();
const currentProject = computed(() => userStore.selectedProject); const currentProject = computed(() => userStore.selectedProject);
const queryForm = ref({ const dialogVisible = ref(false);
versions: '', const row = ref<any>();
sheet: '' const planType = ref<any>('');
const fileUploadRef = ref<any>();
const ruleForm = ref<any>();
const rules = ref({
costEstimationFile: [{ required: true, message: '请上传招标文件', trigger: ['blur'] }]
}); });
const loading = ref(false); const emit = defineEmits(['success']);
const options = ref<any[]>([]); const form = ref({
const sheets = ref<any[]>([]); costEstimationFile: ''
const tableData = ref<any[]>([]);
const isExpandAll = ref(true);
// 接受父组件传递的参数
const props = defineProps({
type: {
type: String,
default: ''
}
}); });
//获取版本号 const open = (rows: any, type: string) => {
const getVersionNums = async () => { dialogVisible.value = true;
try { console.log(rows, type);
const params = { row.value = rows;
projectId: currentProject.value?.id, planType.value = type;
pageSize: 1000,
pageNum: 1
};
const res = await obtainAllVersionNumbers(params);
if (res.code == 200) {
options.value = res.data;
if (res.data.length > 0) {
queryForm.value.versions = res.data[0];
getSheetName();
} else {
queryForm.value.versions = '';
}
}
} catch (error) {
console.log(error);
}
}; };
//选择版本号 const closeDialog = () => {
const changeVersions = () => { dialogVisible.value = false;
getSheetName(); form.value.costEstimationFile = '';
emit('success');
}; };
const submitForm = () => {
//选择表名 fileUploadRef.value.submitUpload().then((res) => {
const changeSheet = () => { if (res == 'noFile') {
getTableData();
};
//获取表名
const getSheetName = async () => {
try {
const params = {
projectId: currentProject.value?.id
// versions: queryForm.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 = '';
}
getTableData();
}
} catch (error) {}
};
//获取表格
const getTableData = async () => {
loading.value = true;
const params = {
projectId: currentProject.value?.id,
sheet: queryForm.value.sheet,
type: props.type
};
const res = await getTreeLimit(params);
loading.value = false;
if (res.code == 200) {
tableData.value = [res.data[0]];
}
console.log(loading.value);
};
//修改单价
const handleSave = (row: any) => {
try {
if (!row.unitPrice) {
ElMessage({ ElMessage({
message: '请输入单价', message: '请上传招标文件',
type: 'warning' type: 'warning'
}); });
return; return;
} }
loading.value = true; dialogVisible.value = false;
biddingLimitListUpdate(row).then((res) => { emit('success');
if (res.code == 200) {
ElMessage({
message: '修改成功',
type: 'success'
});
getTableData();
}
});
} catch (error) {
ElMessage({
message: '修改失败',
type: 'error'
});
}
};
const tableRef = ref<any>();
const toggleExpandAll = () => {
isExpandAll.value = !isExpandAll.value;
console.log(isExpandAll.value);
tableData.value.forEach((row) => {
tableRef.value.toggleRowExpansion(row, isExpandAll.value);
}); });
}; };
//导入 defineExpose({
const importExcel = (options: any): any => { open
let formData = new FormData();
formData.append('file', options.file);
loading.value = true;
BiddingImportExcelFile({ projectId: currentProject.value?.id }, formData)
.then((res) => {
const { code } = res;
if (code == 200) {
proxy.$modal.msgSuccess(res.msg || '导入成功');
getTableData();
}
})
.catch((err) => {})
.finally(() => {
loading.value = false;
});
};
//监听项目id刷新数据
const listeningProject = watch(
() => currentProject.value?.id,
(nid, oid) => {
getVersionNums();
}
);
const handleExport = () => {
proxy?.download(
'/bidding/biddingLimitList/export',
{
projectId: currentProject.value?.id,
sheet: queryForm.value.sheet
},
`限价一览表${queryForm.value.sheet}.xlsx`
);
};
onUnmounted(() => {
listeningProject();
});
onMounted(() => {
getSheetName();
}); });
</script> </script>
<style scoped></style> <style scoped lang="scss"></style>

View File

@ -0,0 +1,99 @@
<template>
<el-dialog v-model="dialogVisible" title="招标文件" width="500" draggable>
<el-form ref="ruleFormRef" style="max-width: 600px" :model="form" :rules="rules" label-width="auto">
<el-form-item label="中标单位" prop="winningBidder">
<el-select v-model="form.winningBidder" filterable placeholder="请选择单位" style="width: 240px">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="招标文件" prop="name">
<file-upload
v-model="form.costEstimationFile"
:fileSize="100"
:auto-upload="false"
uploadUrl="/tender/biddingPlan/uploadBiddingDocuments"
method="put"
ref="fileUploadRef"
:data="{
projectId: currentProject?.id,
type: planType,
fileType: '0',
bidStatus: '0',
id: row.id,
winningBidderId: form.winningBidder
}"
showFileList
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="closeDialog()"> 取消 </el-button>
<el-button type="primary" @click="submitForm()">确定</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { getUnitList } from '@/api/tender/index';
import { useUserStoreHook } from '@/store/modules/user';
const userStore = useUserStoreHook();
const currentProject = computed(() => userStore.selectedProject);
const dialogVisible = ref(false);
const row = ref<any>();
const planType = ref<any>('');
const fileUploadRef = ref<any>();
const ruleForm = ref<any>();
const options = ref<any>([]);
const rules = ref({
costEstimationFile: [{ required: true, message: '请上传招标文件', trigger: ['blur'] }]
});
const emit = defineEmits(['success']);
const form = ref({
costEstimationFile: '',
winningBidder: ''
});
const open = (rows: any, type: string) => {
dialogVisible.value = true;
console.log(rows, type);
row.value = rows;
planType.value = type;
getUnitListData();
};
const getUnitListData = async () => {
let res = await getUnitList({
projectId: currentProject.value?.id
});
if (res.code == 200) {
options.value = res.data.map((item: any) => {
return {
label: item.supplierName,
value: item.id
};
});
}
console.log(res);
};
const closeDialog = () => {
dialogVisible.value = false;
form.value.winningBidder = '';
emit('success');
};
const submitForm = () => {
fileUploadRef.value.submitUpload().then((res) => {
if (res == 'noFile') {
ElMessage({
message: '请上传招标文件',
type: 'warning'
});
return;
}
closeDialog();
emit('success');
});
};
defineExpose({
open
});
</script>
<style scoped lang="scss"></style>

View File

@ -189,7 +189,8 @@
<el-table-column prop="name" label="工程或费用名称" /> <el-table-column prop="name" label="工程或费用名称" />
<el-table-column prop="unit" label="单位" /> <el-table-column prop="unit" label="单位" />
<!-- <el-table-column prop="quantity" label="数量" /> --> <!-- <el-table-column prop="quantity" label="数量" /> -->
<el-table-column prop="selectNum" label="选择数量" align="center"> <el-table-column prop="quantity" label="计划量" align="center" />
<el-table-column prop="selectNum" label="设计量" align="center">
<template #default="scope"> <template #default="scope">
<el-input-number <el-input-number
:model-value="scope.row.selectNum" :model-value="scope.row.selectNum"
@ -203,16 +204,36 @@
:step="1" :step="1"
:controls="false" :controls="false"
:max="Math.floor(scope.row.quantity)" :max="Math.floor(scope.row.quantity)"
v-if="scope.row.quantity && scope.row.quantity != 0" v-if="scope.row.quantity && scope.row.quantity != 0 && scope.row.unitPrice"
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="unitPrice" label="单价" align="center" />
<!-- <el-table-column prop="price" label="总价" align="center"> <el-table-column prop="useQuantity" label="剩余量" align="center">
<template #default="scope"> <template #default="scope">
{{ scope.row.price }} {{
(scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0) == 0
? ''
: (scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)
}}
</template> </template>
</el-table-column> --> </el-table-column>
<el-table-column prop="unitPrice" label="单价" align="center" />
<el-table-column prop="price" label="总价" align="center">
<template #default="scope">
{{
((scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)) *
Number(scope.row.unitPrice) ==
0
? ''
: (
((scope.row.quantity ? Number(scope.row.quantity) : 0) - (scope.row.useQuantity ? Number(scope.row.useQuantity) : 0)) *
Number(scope.row.unitPrice)
).toFixed(2)
}}
</template>
</el-table-column>
</el-table> </el-table>
</el-col> </el-col>
</el-row> </el-row>
@ -266,6 +287,9 @@ import { useUserStoreHook } from '@/store/modules/user';
import { getDicts } from '@/api/system/dict/data'; import { getDicts } from '@/api/system/dict/data';
import { Plus } from '@element-plus/icons-vue'; import { Plus } from '@element-plus/icons-vue';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
import winTheBid from './comm/winTheBid.vue';
import information from './comm/planPage.vue';
import { import {
sheetList, sheetList,
tenderPlanList, tenderPlanList,
@ -279,7 +303,6 @@ import {
delBiddView, delBiddView,
editStatus editStatus
} from '@/api/tender/index'; } from '@/api/tender/index';
import { it } from 'element-plus/es/locale/index.mjs';
const userStore = useUserStoreHook(); const userStore = useUserStoreHook();
const currentProject = computed(() => userStore.selectedProject); const currentProject = computed(() => userStore.selectedProject);