招标
This commit is contained in:
@ -91,3 +91,18 @@ export const getTenderPlanDetail = (query: any): AxiosPromise<any> => {
|
|||||||
params: query
|
params: query
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
//查看招标文件
|
||||||
|
export const biddViewLook = (query: any): AxiosPromise<any> => {
|
||||||
|
return request({
|
||||||
|
url: '/tender/biddingPlan/getAnnex',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//删除招标文件
|
||||||
|
export const delBiddView = (query: any): AxiosPromise<any> => {
|
||||||
|
return request({
|
||||||
|
url: '/tender/biddingPlanAnnex/' + query.ids,
|
||||||
|
method: 'delete'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
>详情</el-button
|
>详情</el-button
|
||||||
>
|
>
|
||||||
<el-button type="primary" size="small" @click="handleSave(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:edit']"
|
<el-button type="primary" size="small" @click="handleSave(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:edit']"
|
||||||
>修改</el-button
|
>确定</el-button
|
||||||
>
|
>
|
||||||
<el-button type="danger" size="small" @click="delHandle(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:remove']"
|
<el-button type="danger" size="small" @click="delHandle(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:remove']"
|
||||||
>删除</el-button
|
>删除</el-button
|
||||||
|
@ -1,245 +1,74 @@
|
|||||||
<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>
|
planType: 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']"
|
/>
|
||||||
>
|
</el-form-item>
|
||||||
<template #trigger>
|
</el-form>
|
||||||
<el-button type="primary">导入excel</el-button>
|
<template #footer>
|
||||||
</template>
|
<div class="dialog-footer">
|
||||||
</el-upload>
|
<el-button @click="resetForm()"> 取消 </el-button>
|
||||||
</el-form-item>
|
<el-button type="primary" @click="submitForm()">确定</el-button>
|
||||||
<el-form-item>
|
</div>
|
||||||
<el-button type="primary" @click="handleExport()" v-hasPermi="['bidding:biddingLimitList:export']">导出excel</el-button>
|
</template>
|
||||||
</el-form-item>
|
</el-dialog>
|
||||||
</el-form>
|
|
||||||
</el-card>
|
|
||||||
</transition>
|
|
||||||
<el-card shadow="never" class="mb8">
|
|
||||||
<el-table ref="tableRef" v-loading="loading" :data="tableData" row-key="id" border lazy default-expand-all>
|
|
||||||
<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>
|
|
||||||
</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 { id } from 'element-plus/es/locale/index.mjs';
|
||||||
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 loading = ref(false);
|
const ruleForm = ref<any>();
|
||||||
const options = ref<any[]>([]);
|
const rules = ref({
|
||||||
const sheets = ref<any[]>([]);
|
costEstimationFile: [{ required: true, message: '请上传招标文件', trigger: ['blur'] }]
|
||||||
const tableData = ref<any[]>([]);
|
|
||||||
const isExpandAll = ref(true);
|
|
||||||
// 接受父组件传递的参数
|
|
||||||
const props = defineProps({
|
|
||||||
type: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//获取版本号
|
const form = ref({
|
||||||
const getVersionNums = async () => {
|
costEstimationFile: ''
|
||||||
try {
|
});
|
||||||
const params = {
|
|
||||||
projectId: currentProject.value?.id,
|
|
||||||
pageSize: 1000,
|
|
||||||
pageNum: 1
|
|
||||||
};
|
|
||||||
|
|
||||||
const res = await obtainAllVersionNumbers(params);
|
const open = (rows: any, type: string) => {
|
||||||
if (res.code == 200) {
|
dialogVisible.value = true;
|
||||||
options.value = res.data;
|
console.log(rows, type);
|
||||||
if (res.data.length > 0) {
|
row.value = rows;
|
||||||
queryForm.value.versions = res.data[0];
|
planType.value = type;
|
||||||
getSheetName();
|
|
||||||
} else {
|
|
||||||
queryForm.value.versions = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
//选择版本号
|
const resetForm = () => {};
|
||||||
const changeVersions = () => {
|
const submitForm = () => {
|
||||||
getSheetName();
|
fileUploadRef.value.submitUpload().then((res) => {
|
||||||
};
|
if (res == 'noFile') {
|
||||||
|
|
||||||
//选择表名
|
|
||||||
const changeSheet = () => {
|
|
||||||
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) => {
|
|
||||||
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>
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
<el-form-item label="内容" prop="sheet">
|
<el-form-item label="内容" prop="sheet">
|
||||||
<el-input v-model="queryForm.content" placeholder="请输入内容" clearable @keyup.enter="handleQuery" />
|
<el-input v-model="queryForm.content" placeholder="请输入内容" clearable @keyup.enter="handleQuery" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
@ -25,6 +26,13 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="name" label="名称" />
|
<el-table-column prop="name" label="名称" />
|
||||||
<el-table-column prop="content" label="内容" />
|
<el-table-column prop="content" label="内容" />
|
||||||
|
<el-table-column prop="bidd" label="招标文件">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button type="primary" link v-hasPermi="['tender:segmentedIndicatorPlanning:getMore']" @click="biddView(scope.row)"
|
||||||
|
>查看文件</el-button
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column prop="plannedBiddingTime" label="计划招标时间" align="center">
|
<el-table-column prop="plannedBiddingTime" label="计划招标时间" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-date-picker v-model="scope.row.plannedBiddingTime" type="date" value-format="YYYY-MM-DD" placeholder="选择时间" />
|
<el-date-picker v-model="scope.row.plannedBiddingTime" type="date" value-format="YYYY-MM-DD" placeholder="选择时间" />
|
||||||
@ -32,13 +40,21 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="price" label="操作" align="center">
|
<el-table-column prop="price" label="操作" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button type="warning" size="small" @click="handleDetail(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:getMore']"
|
<el-button type="primary" link icon="View" @click="handleDetail(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:getMore']"
|
||||||
>详情</el-button
|
>详情</el-button
|
||||||
>
|
>
|
||||||
<el-button type="primary" size="small" @click="handleSave(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:edit']"
|
<el-button
|
||||||
>修改</el-button
|
type="primary"
|
||||||
>
|
link
|
||||||
<el-button type="danger" size="small" @click="delHandle(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:remove']"
|
icon="FolderOpened"
|
||||||
|
@click="handleSave(scope.row)"
|
||||||
|
v-hasPermi="['tender:segmentedIndicatorPlanning:edit']"
|
||||||
|
>上传投标资料
|
||||||
|
</el-button>
|
||||||
|
<el-button type="primary" link icon="Edit" @click="handleSave(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:edit']"
|
||||||
|
>信息
|
||||||
|
</el-button>
|
||||||
|
<el-button type="primary" link icon="Delete" @click="delHandle(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:remove']"
|
||||||
>删除</el-button
|
>删除</el-button
|
||||||
>
|
>
|
||||||
</template>
|
</template>
|
||||||
@ -143,6 +159,18 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
<information ref="informationRef" />
|
||||||
|
<el-dialog title="查看文件" v-model="biddDialog" width="45%" draggable>
|
||||||
|
<el-table :data="biddViewData" border>
|
||||||
|
<el-table-column prop="name" label="文件名" />
|
||||||
|
<el-table-column prop="price" label="操作" align="center">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button type="primary" link icon="View" @click="openPdf(scope.row)">查看</el-button>
|
||||||
|
<el-button type="primary" link icon="Delete" @click="delHandlebidd(scope.row)">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -151,6 +179,7 @@ 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 information from './comm/planPage.vue';
|
||||||
import {
|
import {
|
||||||
sheetList,
|
sheetList,
|
||||||
tenderPlanList,
|
tenderPlanList,
|
||||||
@ -159,7 +188,9 @@ import {
|
|||||||
updateTenderPlan,
|
updateTenderPlan,
|
||||||
treeList,
|
treeList,
|
||||||
getTenderPlanDetail,
|
getTenderPlanDetail,
|
||||||
obtainAllVersionNumbers
|
obtainAllVersionNumbers,
|
||||||
|
biddViewLook,
|
||||||
|
delBiddView
|
||||||
} from '@/api/tender/index';
|
} from '@/api/tender/index';
|
||||||
|
|
||||||
const userStore = useUserStoreHook();
|
const userStore = useUserStoreHook();
|
||||||
@ -456,30 +487,7 @@ const submitForm = async (formEl: FormInstance | undefined) => {
|
|||||||
};
|
};
|
||||||
//确定修改
|
//确定修改
|
||||||
const handleSave = (row: any) => {
|
const handleSave = (row: any) => {
|
||||||
try {
|
informationRef.value.open(row, planType.value);
|
||||||
if (!row.plannedBiddingTime) {
|
|
||||||
ElMessage({
|
|
||||||
message: '请输入计划招标时间',
|
|
||||||
type: 'warning'
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
updateTenderPlan({ ...row, type: planType.value }).then((res) => {
|
|
||||||
if (res.code == 200) {
|
|
||||||
ElMessage({
|
|
||||||
message: '修改成功',
|
|
||||||
type: 'success'
|
|
||||||
});
|
|
||||||
getList();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
ElMessage({
|
|
||||||
message: '修改失败',
|
|
||||||
type: 'error'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
//删除
|
//删除
|
||||||
const delHandle = (row: any) => {
|
const delHandle = (row: any) => {
|
||||||
@ -518,6 +526,42 @@ const getDetails = (row: any) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
const informationRef = ref();
|
||||||
|
const biddDialog = ref(false);
|
||||||
|
const biddViewData = ref<any>([]);
|
||||||
|
const biddViewRow = ref<any>({});
|
||||||
|
|
||||||
|
//查看招标文件
|
||||||
|
const biddView = async (row: any) => {
|
||||||
|
biddViewRow.value = row;
|
||||||
|
biddDialog.value = true;
|
||||||
|
const params = {
|
||||||
|
id: row.id
|
||||||
|
};
|
||||||
|
const res = await biddViewLook(params);
|
||||||
|
if (res.code == 200) {
|
||||||
|
biddViewData.value = res.data;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//删除文件
|
||||||
|
const delHandlebidd = (row: any) => {
|
||||||
|
const params = {
|
||||||
|
ids: row.id
|
||||||
|
};
|
||||||
|
delBiddView(params).then((res) => {
|
||||||
|
if (res.code == 200) {
|
||||||
|
ElMessage({
|
||||||
|
message: '删除成功',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
biddView(biddViewRow.value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//查看文件
|
||||||
|
const openPdf = (row: any) => {
|
||||||
|
window.open(row.url);
|
||||||
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getTabsList();
|
getTabsList();
|
||||||
|
Reference in New Issue
Block a user