This commit is contained in:
ljx
2025-09-11 16:49:24 +08:00
parent 69cfffa0d4
commit 61a21a6250
12 changed files with 223 additions and 82 deletions

View File

@ -8,7 +8,7 @@ VITE_APP_ENV = 'development'
# VITE_APP_BASE_API = 'http://192.168.110.209:8899' # VITE_APP_BASE_API = 'http://192.168.110.209:8899'
# 李陈杰 209 # 李陈杰 209
VITE_APP_BASE_API = 'http://192.168.110.209: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.149:8899'
# 罗成 # 罗成

View File

@ -66,7 +66,7 @@
{{ scope.row.children.length > 0 ? '' : scope.row.quantity }} {{ scope.row.children.length > 0 ? '' : scope.row.quantity }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="单价" align="center"> <el-table-column prop="remark" label="单价" align="center" width="200px">
<template #default="scope"> <template #default="scope">
<el-input-number <el-input-number
:disabled="versionObj.status != 'draft'" :disabled="versionObj.status != 'draft'"
@ -81,6 +81,7 @@
:precision="4" :precision="4"
:controls="false" :controls="false"
v-if="scope.row.quantity && scope.row.quantity != 0" v-if="scope.row.quantity && scope.row.quantity != 0"
width="200px"
/> />
</template> </template>
</el-table-column> </el-table-column>

View File

@ -30,7 +30,7 @@
{{ proxy.formatPrice(scope.row.price) }} {{ proxy.formatPrice(scope.row.price) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="plannedBiddingTime" align="center"> <el-table-column prop="plannedBiddingTime" align="center" width="250px">
<template #header> <span style="color: red">*</span>计划招标时间 </template> <template #header> <span style="color: red">*</span>计划招标时间 </template>
<template #default="scope"> <template #default="scope">
<el-date-picker <el-date-picker
@ -39,6 +39,7 @@
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="选择时间" placeholder="选择时间"
:disabled="scope.row.status == 0" :disabled="scope.row.status == 0"
style="width: 200px"
/> />
</template> </template>
</el-table-column> </el-table-column>
@ -126,7 +127,7 @@
<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="quantity" label="计划量" align="center" /> <el-table-column prop="quantity" label="计划量" align="center" />
<el-table-column prop="selectNum" label="设计量" align="center"> <el-table-column prop="selectNum" label="设计量" align="center" width="200px">
<template #default="scope"> <template #default="scope">
<el-input-number <el-input-number
:model-value="scope.row.selectNum" :model-value="scope.row.selectNum"
@ -141,6 +142,7 @@
: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 && scope.row.unitPrice" v-if="scope.row.quantity && scope.row.quantity != 0 && scope.row.unitPrice"
width="150px"
/> />
</template> </template>
</el-table-column> </el-table-column>

View File

@ -82,18 +82,11 @@
</el-row> </el-row>
</template> </template>
<el-table <el-table v-loading="loading" :data="formalitiesAreConsolidatedList" @selection-change="handleSelectionChange" row-key="id" default-expand-all>
v-loading="loading"
:table-layout="'auto'"
:data="formalitiesAreConsolidatedList"
@selection-change="handleSelectionChange"
row-key="id"
default-expand-all
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="手续办理清单" align="left" prop="formalitiesName"> <el-table-column label="手续办理清单" align="left" prop="formalitiesName">
<template #default="scope"> <template #default="scope">
{{ scope.row.formalitiesName }} <div>{{ scope.row.formalitiesName }}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="计划开始时间" align="center" prop="planTheStartTime" width="180"> <el-table-column label="计划开始时间" align="center" prop="planTheStartTime" width="180">

View File

@ -8,27 +8,35 @@
<span>{{ scope.row.residue }}</span> <span>{{ scope.row.residue }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="出库数量" align="center" prop="number"> <el-table-column label="出库数量" align="center" prop="number" width="150px">
<template #default="scope"> <template #default="scope">
<el-input-number v-if="scope.row.type" v-model="scope.row.number" :controls="false" :min="0" :max="scope.row.residue" :precision="0" /> <el-input-number
v-if="scope.row.type"
v-model="scope.row.number"
:controls="false"
:min="0"
:max="scope.row.residue"
:precision="0"
style="width: 100px"
/>
<span v-else>{{ scope.row.number }}</span> <span v-else>{{ scope.row.number }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="交接单位" align="center" prop="recipient"> <el-table-column label="交接单位" align="center" prop="recipient" width="150px">
<template #default="scope"> <template #default="scope">
<el-input v-if="scope.row.type" style="width: 150px" v-model="scope.row.recipient" /> <el-input v-if="scope.row.type" v-model="scope.row.recipient" width="100px" />
<span v-else>{{ scope.row.recipient }}</span> <span v-else>{{ scope.row.recipient }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="领用人" align="center" prop=" shipper"> <el-table-column label="领用人" align="center" prop=" shipper" width="150px">
<template #default="scope"> <template #default="scope">
<el-input v-if="scope.row.type" style="width: 150px" v-model="scope.row.shipper" /> <el-input v-if="scope.row.type" v-model="scope.row.shipper" width="100px" />
<span v-else>{{ scope.row.shipper }}</span> <span v-else>{{ scope.row.shipper }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作人" align="center" prop="operator"> <el-table-column label="操作人" align="center" prop="operator" width="150px">
<template #default="scope"> <template #default="scope">
<el-input v-if="scope.row.type" style="width: 150px" v-model="scope.row.operator" /> <el-input v-if="scope.row.type" v-model="scope.row.operator" width="100px" />
<span v-else>{{ scope.row.operator }}</span> <span v-else>{{ scope.row.operator }}</span>
</template> </template>
</el-table-column> </el-table-column>

View File

@ -3,7 +3,25 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="5"> <el-col :span="5">
<el-card shadow="never"> <el-card shadow="never">
<el-tree style="max-width: 600px" :data="TreeData" :props="defaultProps" @node-click="handleNodeClick" /> <!-- <el-tree style="max-width: 600px" :data="TreeData" :props="defaultProps" @node-click="handleNodeClick" /> -->
<el-tree
:data="TreeData"
:props="defaultProps"
@node-click="handleNodeClick"
node-key="id"
default-expand-all
:expand-on-click-node="false"
>
<template #default="{ node, data }">
<span class="custom-tree-node">
<span class="tree-title">
<div>
<div>{{ node.label }}</div>
</div>
</span>
</span>
</template>
</el-tree>
</el-card> </el-card>
</el-col> </el-col>
@ -473,3 +491,53 @@ onMounted(() => {
getMaterialsListData(); getMaterialsListData();
}); });
</script> </script>
<style lang="scss" scoped>
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
padding-right: 8px;
height: 40px; /* 固定高度 */
}
.tree-title {
display: flex;
align-items: center;
}
:deep(.el-tree) {
font-weight: normal;
}
:deep(.el-tree-node) {
margin: 2px 0;
}
:deep(.el-tree-node__content) {
height: auto !important;
margin: 2px 0;
border-radius: 4px;
transition: all 0.3s;
}
:deep(.el-tree-node__content:hover) {
background-color: #ecf5ff !important;
}
/* 为不同层级添加不同的边框颜色 */
:deep(.el-tree-node:focus > .el-tree-node__content) {
background-color: #d9ecff !important;
}
:deep(.el-tree-node > .el-tree-node__content) {
border-left: 3px solid #409eff;
}
:deep(.el-tree-node .el-tree-node__children .el-tree-node__content) {
border-left: 3px solid #67c23a;
}
:deep(.el-tree-node .el-tree-node__children .el-tree-node__children .el-tree-node__content) {
border-left: 3px solid #e6a23c;
}
</style>

View File

@ -71,7 +71,7 @@
{{ scope.row.children.length > 0 ? '' : scope.row.quantity }} {{ scope.row.children.length > 0 ? '' : scope.row.quantity }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="单价" align="center"> <el-table-column prop="remark" label="单价" align="center" width="200px">
<template #default="scope"> <template #default="scope">
<el-input-number <el-input-number
:model-value="scope.row.unitPrice" :model-value="scope.row.unitPrice"
@ -86,6 +86,7 @@
:controls="false" :controls="false"
v-if="scope.row.quantity && scope.row.quantity != 0" v-if="scope.row.quantity && scope.row.quantity != 0"
:disabled="versionsData.status != 'draft'" :disabled="versionsData.status != 'draft'"
width="200px"
/> />
</template> </template>
</el-table-column> </el-table-column>

View File

@ -13,8 +13,7 @@
<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>
<el-button type="primary" plain :icon="Plus" @click="openDialog" <el-button type="primary" plain :icon="Plus" @click="openDialog" v-hasPermi="['tender:biddingPlan:add']">新增</el-button>
v-hasPermi="['tender:biddingPlan:add']">新增</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -34,8 +33,9 @@
<el-table-column prop="bidd" align="center"> <el-table-column prop="bidd" align="center">
<template #header> <span style="color: red">*</span>招标文件 </template> <template #header> <span style="color: red">*</span>招标文件 </template>
<template #default="scope"> <template #default="scope">
<el-button type="primary" link v-hasPermi="['tender:biddingPlan:getAnnex']" @click="biddView(scope.row)" <el-button type="primary" link v-hasPermi="['tender:biddingPlan:getAnnex']" @click="biddView(scope.row)" v-if="scope.row.annexCount > 0"
v-if="scope.row.annexCount > 0">查看文件({{ scope.row.annexCount }})</el-button> >查看文件({{ scope.row.annexCount }})</el-button
>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="winningBidder" align="center"> <el-table-column prop="winningBidder" align="center">
@ -47,57 +47,104 @@
<el-table-column prop="bidFileName" align="center"> <el-table-column prop="bidFileName" align="center">
<template #header> <span style="color: red">*</span>中标文件 </template> <template #header> <span style="color: red">*</span>中标文件 </template>
<template #default="scope"> <template #default="scope">
<el-button type="primary" link @click="openPdf(scope.row.bidFile)">{{ scope.row.bidFileName }} <el-button type="primary" link @click="openPdf(scope.row.bidFile)">{{ scope.row.bidFileName }} </el-button>
</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="plannedBiddingTime" align="center" width="250"> <el-table-column prop="plannedBiddingTime" align="center" width="200px">
<template #header> <span style="color: red">*</span>计划招标时间 </template> <template #header> <span style="color: red">*</span>计划招标时间 </template>
<template #default="scope"> <template #default="scope">
<el-date-picker v-model="scope.row.plannedBiddingTime" @change=" <el-date-picker
v-model="scope.row.plannedBiddingTime"
@change="
(val: any) => { (val: any) => {
changeBiddingTime(val, scope.row); changeBiddingTime(val, scope.row);
} }
" type="date" value-format="YYYY-MM-DD" placeholder="选择时间" :disabled="scope.row.bidStatus == 1" "
v-hasPermi="['tender:biddingPlan:edit']" /> type="date"
value-format="YYYY-MM-DD"
placeholder="选择时间"
:disabled="scope.row.bidStatus == 1"
v-hasPermi="['tender:biddingPlan:edit']"
style="width: 150px"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="contractPrice" align="center" width="200"> <el-table-column prop="contractPrice" align="center" width="200px">
<template #header> <span style="color: red">*</span>合同金额 </template> <template #header> <span style="color: red">*</span>合同金额 </template>
<template #default="scope"> <template #default="scope">
<el-input-number :model-value="scope.row.contractPrice" @change=" <el-input-number
:model-value="scope.row.contractPrice"
@change="
(val) => { (val) => {
scope.row.contractPrice = val; scope.row.contractPrice = val;
changeContractPrice(val, scope.row); changeContractPrice(val, scope.row);
} }
" :precision="4" :min="0" :controls="false" :disabled="scope.row.bidStatus == 1" "
v-hasPermi="['tender:biddingPlan:edit']" /> :precision="4"
:min="0"
:controls="false"
:disabled="scope.row.bidStatus == 1"
v-hasPermi="['tender:biddingPlan:edit']"
width="200px"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="price" label="操作" align="center" width="400"> <el-table-column prop="price" label="操作" align="center" width="400">
<template #default="scope"> <template #default="scope">
<el-button type="primary" link icon="FolderOpened" @click="handleSave(scope.row)" <el-button
v-hasPermi="['tender:biddingPlan:uploadBiddingDocuments']" :disabled="scope.row.bidStatus == 1">招标上传 type="primary"
link
icon="FolderOpened"
@click="handleSave(scope.row)"
v-hasPermi="['tender:biddingPlan:uploadBiddingDocuments']"
:disabled="scope.row.bidStatus == 1"
>招标上传
</el-button> </el-button>
<el-button type="primary" link icon="FolderOpened" @click="handleWinTheBid(scope.row)" <el-button
v-hasPermi="['tender:biddingPlan:uploadBiddingDocuments']" :disabled="scope.row.bidStatus == 1">中标上传 type="primary"
link
icon="FolderOpened"
@click="handleWinTheBid(scope.row)"
v-hasPermi="['tender:biddingPlan:uploadBiddingDocuments']"
:disabled="scope.row.bidStatus == 1"
>中标上传
</el-button> </el-button>
<!-- <el-button type="primary" link icon="Edit" @click="handleSave(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:edit']" <!-- <el-button type="primary" link icon="Edit" @click="handleSave(scope.row)" v-hasPermi="['tender:segmentedIndicatorPlanning:edit']"
>信息 >信息
</el-button> --> </el-button> -->
<el-button type="primary" link icon="View" @click="handleDetail(scope.row)" <el-button
:disabled="scope.row.bidStatus == 1" v-hasPermi="['tender:biddingPlan:getMore']">详情</el-button> type="primary"
link
icon="View"
@click="handleDetail(scope.row)"
:disabled="scope.row.bidStatus == 1"
v-hasPermi="['tender:biddingPlan:getMore']"
>详情</el-button
>
<el-button type="primary" link icon="Delete" @click="delHandle(scope.row)" <el-button
:disabled="scope.row.bidStatus == 1" v-hasPermi="['tender:biddingPlan:remove']">删除</el-button> type="primary"
<el-button type="primary" link icon="Lock" @click="editStatusBtn(scope.row)" link
:disabled="scope.row.bidStatus == 1" v-hasPermi="['tender:biddingPlan:editStatus']">确定</el-button> icon="Delete"
@click="delHandle(scope.row)"
:disabled="scope.row.bidStatus == 1"
v-hasPermi="['tender:biddingPlan:remove']"
>删除</el-button
>
<el-button
type="primary"
link
icon="Lock"
@click="editStatusBtn(scope.row)"
:disabled="scope.row.bidStatus == 1"
v-hasPermi="['tender:biddingPlan:editStatus']"
>确定</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<el-dialog title="新增" v-model="dialogVisible" width="75%" draggable> <el-dialog title="新增" v-model="dialogVisible" width="75%" draggable>
@ -119,8 +166,7 @@
<el-form :model="treeForm" :inline="true"> <el-form :model="treeForm" :inline="true">
<el-form-item label="版本号" prop="versions"> <el-form-item label="版本号" prop="versions">
<el-select v-model="treeForm.versions" placeholder="选择版本号" @change="changeVersions"> <el-select v-model="treeForm.versions" placeholder="选择版本号" @change="changeVersions">
<el-option v-for="item in options" :key="item.versions" :label="item.versions" <el-option v-for="item in options" :key="item.versions" :label="item.versions" :value="item.versions" />
:value="item.versions" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="表名" prop="sheet" v-if="planType == '2'"> <el-form-item label="表名" prop="sheet" v-if="planType == '2'">
@ -133,8 +179,16 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<el-table :data="treeData" ref="treeTableRef" v-loading="treeLoading" row-key="id" border lazy <el-table
default-expand-all @selection-change="handleSelection"> :data="treeData"
ref="treeTableRef"
v-loading="treeLoading"
row-key="id"
border
lazy
default-expand-all
@selection-change="handleSelection"
>
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column prop="num" label="编号" /> <el-table-column prop="num" label="编号" />
<el-table-column prop="name" label="工程或费用名称" /> <el-table-column prop="name" label="工程或费用名称" />
@ -162,13 +216,20 @@
</el-table-column> </el-table-column>
<el-table-column prop="selectNum" label="设计量" align="center"> <el-table-column prop="selectNum" label="设计量" align="center">
<template #default="scope"> <template #default="scope">
<el-input-number :model-value="scope.row.selectNum" @change=" <el-input-number
:model-value="scope.row.selectNum"
@change="
(val) => { (val) => {
scope.row.selectNum = val; scope.row.selectNum = val;
handleNumberChange(scope.row); handleNumberChange(scope.row);
} }
" :precision="2" :step="1" :controls="false" :max="Math.floor(scope.row.quantity)" "
v-if="scope.row.quantity && scope.row.quantity != 0 && scope.row.unitPrice" /> :precision="2"
:step="1"
:controls="false"
:max="Math.floor(scope.row.quantity)"
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="unitPrice" label="单价" align="center">
@ -228,8 +289,15 @@
<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="primary" link icon="View" @click="openPdf(scope.row.url)">查看</el-button> <el-button type="primary" link icon="View" @click="openPdf(scope.row.url)">查看</el-button>
<el-button type="primary" link icon="Delete" @click="delHandlebidd(scope.row)" <el-button
v-if="scope.row.bidStatus != 1" v-hasPermi="['tender:biddingPlanAnnex:remove']">删除</el-button> type="primary"
link
icon="Delete"
@click="delHandlebidd(scope.row)"
v-if="scope.row.bidStatus != 1"
v-hasPermi="['tender:biddingPlanAnnex:remove']"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -662,7 +730,7 @@ const delHandlebidd = (row: any) => {
}); });
biddView(biddViewRow.value); biddView(biddViewRow.value);
} }
getList() getList();
}); });
}; };
//修改状态 //修改状态

View File

@ -28,7 +28,7 @@
<el-input v-model="queryParams.flowName" placeholder="请输入流程名称" @keyup.enter="handleQuery" /> <el-input v-model="queryParams.flowName" placeholder="请输入流程名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="项目" prop="projectId"> <el-form-item label="项目" prop="projectId">
<el-select v-model="queryParams.projectId" placeholder="全部" clearable filterable style="width: 150px; margin-right: 20px"> <el-select v-model="queryParams.projectId" placeholder="全部" filterable style="width: 150px; margin-right: 20px">
<el-option v-for="project in projects" :key="project.id" :label="project.name" :value="project.id" /> <el-option v-for="project in projects" :key="project.id" :label="project.name" :value="project.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -11,7 +11,7 @@
<el-input v-model="queryParams.flowName" placeholder="请输入流程名称" @keyup.enter="handleQuery" /> <el-input v-model="queryParams.flowName" placeholder="请输入流程名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="项目" prop="projectId"> <el-form-item label="项目" prop="projectId">
<el-select v-model="queryParams.projectId" placeholder="全部" clearable filterable style="width: 150px; margin-right: 20px"> <el-select v-model="queryParams.projectId" placeholder="全部" filterable style="width: 150px; margin-right: 20px">
<el-option v-for="project in projects" :key="project.id" :label="project.name" :value="project.id" /> <el-option v-for="project in projects" :key="project.id" :label="project.name" :value="project.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -16,7 +16,7 @@
<el-input v-model="queryParams.flowName" placeholder="请输入流程名称" @keyup.enter="handleQuery" /> <el-input v-model="queryParams.flowName" placeholder="请输入流程名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="项目" prop="projectId"> <el-form-item label="项目" prop="projectId">
<el-select v-model="queryParams.projectId" placeholder="全部" clearable filterable style="width: 150px; margin-right: 20px"> <el-select v-model="queryParams.projectId" placeholder="全部" filterable style="width: 150px; margin-right: 20px">
<el-option v-for="project in projects" :key="project.id" :label="project.name" :value="project.id" /> <el-option v-for="project in projects" :key="project.id" :label="project.name" :value="project.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -16,7 +16,7 @@
<el-input v-model="queryParams.flowName" placeholder="请输入流程名称" @keyup.enter="handleQuery" /> <el-input v-model="queryParams.flowName" placeholder="请输入流程名称" @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="项目" prop="projectId"> <el-form-item label="项目" prop="projectId">
<el-select v-model="queryParams.projectId" placeholder="全部" clearable filterable style="width: 150px; margin-right: 20px"> <el-select v-model="queryParams.projectId" placeholder="全部" filterable style="width: 150px; margin-right: 20px">
<el-option v-for="project in projects" :key="project.id" :label="project.name" :value="project.id" /> <el-option v-for="project in projects" :key="project.id" :label="project.name" :value="project.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>