refactor(components): 优化多个组件的样式和布局

- 调整了多个组件的输入框、按钮等元素的样式
- 优化了部分对话框的布局结构
- 统一了表单项的样式
- 调整了部分字体大小和颜色
This commit is contained in:
tcy
2025-09-09 21:12:04 +08:00
parent 78de3276d3
commit e6f235036e
7 changed files with 306 additions and 361 deletions

View File

@ -1,29 +1,11 @@
<template>
<div class="upload-file">
<el-upload
ref="fileUploadRef"
multiple
:action="realUploadUrl"
:before-upload="handleBeforeUpload"
:file-list="fileList"
:limit="limit"
:on-error="handleUploadError"
:on-exceed="handleExceed"
:on-success="handleUploadSuccess"
:show-file-list="showFileList"
:on-preview="handlePreview"
:headers="headers"
class="upload-file-uploader"
:list-type="isConstruction ? 'picture-card' : 'text'"
:accept="accept"
:drag="isDarg"
:data="data"
:auto-upload="autoUpload"
:on-change="handleChange"
:on-remove="handleRemove"
:method="method"
:http-request="customUpload"
>
<el-upload ref="fileUploadRef" multiple :action="realUploadUrl" :before-upload="handleBeforeUpload"
:file-list="fileList" :limit="limit" :on-error="handleUploadError" :on-exceed="handleExceed"
:on-success="handleUploadSuccess" :show-file-list="showFileList" :on-preview="handlePreview" :headers="headers"
class="upload-file-uploader" :list-type="isConstruction ? 'picture-card' : 'text'" :accept="accept" :drag="isDarg"
:data="data" :auto-upload="autoUpload" :on-change="handleChange" :on-remove="handleRemove" :method="method"
:http-request="customUpload">
<slot>
<div>
<!-- 上传按钮 -->
@ -42,20 +24,10 @@
的文件
</div>
<!-- 文件列表 -->
<transition-group
v-if="!isConstruction && !isImportInfo"
class="upload-file-list el-upload-list el-upload-list--text"
name="el-fade-in-linear"
tag="ul"
@click.stop
>
<li
style="margin-top: 10px"
v-for="(file, index) in fileList"
:key="file.uid"
class="el-upload-list__item ele-upload-list__item-content"
v-if="autoUpload"
>
<transition-group v-if="!isConstruction && !isImportInfo"
class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul" @click.stop>
<li style="margin-top: 10px" v-for="(file, index) in fileList" :key="file.uid"
class="el-upload-list__item ele-upload-list__item-content" v-if="autoUpload">
<el-link :href="`${file.url}`" :underline="false" target="_blank">
<span class="el-icon-document"> {{ getFileName(file.name) }} </span>
</el-link>
@ -305,8 +277,6 @@ const handleChange = (file: any, filelist: any) => {
// 删除文件
const handleRemove = (file: any, fileList: any) => {
console.log(11);
emit('handleRemove', file, fileList);
};

View File

@ -1,6 +1,7 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="100px">
@ -11,25 +12,15 @@
<el-input v-model="queryParams.formalitiesId" placeholder="请输入手续办理清单模板id" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<el-form-item label="计划开始时间" prop="planTheStartTime">
<el-date-picker
clearable
v-model="queryParams.planTheStartTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择计划开始时间"
/>
<el-date-picker clearable v-model="queryParams.planTheStartTime" type="date" value-format="YYYY-MM-DD"
placeholder="请选择计划开始时间" />
</el-form-item>
<el-form-item label="负责人" prop="head">
<el-input v-model="queryParams.head" placeholder="请输入负责人" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="实际完成时间" prop="actualCompletionTime">
<el-date-picker
clearable
v-model="queryParams.actualCompletionTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择实际完成时间"
/>
<el-date-picker clearable v-model="queryParams.actualCompletionTime" type="date" value-format="YYYY-MM-DD"
placeholder="请选择实际完成时间" />
</el-form-item>
<!-- <el-form-item label="手续材料" prop="formalitiesUrl">
<el-input v-model="queryParams.formalitiesUrl" placeholder="请输入手续材料" clearable @keyup.enter="handleQuery" />
@ -47,15 +38,13 @@
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd()" v-hasPermi="['formalities:formalitiesAreConsolidated:getTree']"
>新增</el-button
>
<span style="margin-left: 10px"
><el-tooltip class="box-item" effect="dark" content="从原有模板列表选择新增" placement="top">
<el-button type="primary" plain icon="Plus" @click="handleAdd()"
v-hasPermi="['formalities:formalitiesAreConsolidated:getTree']">新增</el-button>
<span style="margin-left: 10px"><el-tooltip class="box-item" effect="dark" content="从原有模板列表选择新增"
placement="top">
<el-icon color="#409efc">
<WarningFilled />
</el-icon> </el-tooltip
></span>
</el-icon> </el-tooltip></span>
</el-col>
<el-col :span="1.5" v-hasPermi="['formalities:listOfFormalities:list']">
<el-button type="primary" plain icon="Plus" @click="addTemplate()">新增数据</el-button>
@ -82,7 +71,8 @@
</el-row>
</template>
<el-table v-loading="loading" :data="formalitiesAreConsolidatedList" @selection-change="handleSelectionChange" row-key="id" default-expand-all>
<el-table v-loading="loading" :data="formalitiesAreConsolidatedList" @selection-change="handleSelectionChange"
row-key="id" default-expand-all>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="手续办理清单" align="left" prop="formalitiesName">
<template #default="scope">
@ -109,13 +99,13 @@
<el-table-column label="手续材料" align="center" prop="formalitiesUrl" width="180">
<template #default="scope">
<div style="display: flex; justify-content: center; align-items: center">
<div>
<el-link type="primary" :underline="false" @click="handlePreview(scope.row)" target="_blank" v-if="scope.row.formalitiesPid"
>查看</el-link
>
<div style="width: 30px;">
<el-link type="primary" :underline="false" @click="handlePreview(scope.row)" target="_blank"
v-if="scope.row.formalitiesPid">查看</el-link>
</div>
<div>
<el-badge v-if="scope.row.fileCount" :value="scope.row.fileCount" class="item" type="danger"> </el-badge>
<div style="width: 5px;">
<el-badge v-if="scope.row.fileCount" :value="scope.row.fileCount" class="item" type="danger">
</el-badge>
</div>
</div>
</template>
@ -124,42 +114,32 @@
<el-table-column label="操作" align="center" fixed="right">
<template #default="scope">
<div v-if="scope.row.formalitiesPid">
<el-button
link
type="primary"
icon="Edit"
v-if="scope.row.processingStatus != '已完成'"
<el-button link type="primary" icon="Edit" v-if="scope.row.processingStatus != '已完成'"
@click="handleUpdate(scope.row)"
v-hasPermi="['formalities:formalitiesAreConsolidated:edit']"
>修改</el-button
>
<el-button link type="primary" icon="Upload" v-if="scope.row.processingStatus != '已完成'" @click="handleUpload(scope.row)"
>上传</el-button
>
<el-button
link
type="primary"
icon="EditPen"
@click="handleUpdateStatus(scope.row)"
v-hasPermi="['formalities:formalitiesAreConsolidated:edit']"
>修改状态</el-button
>
v-hasPermi="['formalities:formalitiesAreConsolidated:edit']">修改</el-button>
<el-button link type="primary" icon="Upload" v-if="scope.row.processingStatus != '已完成'"
@click="handleUpload(scope.row)">上传</el-button>
<el-button link type="primary" icon="EditPen" @click="handleUpdateStatus(scope.row)"
v-hasPermi="['formalities:formalitiesAreConsolidated:edit']">修改状态</el-button>
</div>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改合规性手续合账对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="formalitiesAreConsolidatedFormRef" :model="form" :rules="rules" label-width="160px">
<el-form-item label="计划开始时间" prop="planTheStartTime">
<el-date-picker clearable v-model="form.planTheStartTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择计划开始时间">
<el-date-picker clearable v-model="form.planTheStartTime" type="date" value-format="YYYY-MM-DD"
placeholder="请选择计划开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="计划完成时间" prop="planTheStartTime">
<el-date-picker clearable v-model="form.planTheEndTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择计划完成时间">
<el-date-picker clearable v-model="form.planTheEndTime" type="date" value-format="YYYY-MM-DD"
placeholder="请选择计划完成时间">
</el-date-picker>
</el-form-item>
<el-form-item label="负责人" prop="head">
@ -181,7 +161,8 @@
<el-table :data="fileList" style="width: 100%" border v-loading="fileLoading">
<el-table-column prop="fileName" label="文件" align="center">
<template #default="scope">
<el-link :key="scope.row.annexUrl" :href="scope.row.annexUrl" target="_blank" type="primary" :underline="false">
<el-link :key="scope.row.annexUrl" :href="scope.row.annexUrl" target="_blank" type="primary"
:underline="false">
{{ scope.row.fileName || '查看文件' }}
</el-link>
</template>
@ -192,13 +173,8 @@
</template>
</el-table-column>
</el-table>
<pagination
v-show="fileTotal > 0"
:total="fileTotal"
v-model:page="fileParams.pageNum"
v-model:limit="fileParams.pageSize"
@pagination="getFileList"
/>
<pagination v-show="fileTotal > 0" :total="fileTotal" v-model:page="fileParams.pageNum"
v-model:limit="fileParams.pageSize" @pagination="getFileList" />
<template #footer>
<span>
<el-button type="primary" @click="viewVisible = false">关闭</el-button>
@ -208,18 +184,9 @@
<!-- 上传文件对话框 -->
<el-dialog draggable title="上传文件" v-model="fileVisible" width="450">
<el-form-item label="上传文件" prop="processingStatus">
<file-upload
v-model="file"
ref="uploadRef"
uploadUrl="/formalities/formalitiesAnnex"
v-hasPermi="['formalities:formalitiesAnnex:add']"
:data="{ formalitiesId: form.id }"
:fileType="['pdf']"
:auto-upload="false"
showFileList
method="put"
:onUploadSuccess="handleUploadSuccess"
/>
<file-upload v-model="file" ref="uploadRef" uploadUrl="/formalities/formalitiesAnnex"
v-hasPermi="['formalities:formalitiesAnnex:add']" :data="{ formalitiesId: form.id }" :fileType="['pdf']"
:auto-upload="false" showFileList method="put" :onUploadSuccess="handleUploadSuccess" />
</el-form-item>
<template #footer>
<span>
@ -247,18 +214,14 @@
</el-dialog>
<el-dialog title="新增合规性手续合账" v-model="templateVisbile" width="450">
<el-form-item label="合规性手续模板">
<el-cascader
v-model="tempValue"
:options="tempTreeList"
:props="{
<el-cascader v-model="tempValue" :options="tempTreeList" :props="{
multiple: true,
value: 'id',
label: 'name',
disabled: (node: any) => {
return (node.pid == 0 && !node.children.length) || node.status == 1; // 有 parent 的是二级,没有 parent 的是一级,禁用一级
}
}"
/>
}" />
<div style="margin-left: 10px; display: flex; justify-content: center; align-items: center">
<el-tooltip class="box-item" effect="dark" content="列表上已选择得模版不可再选" placement="top">
<el-icon>
@ -284,7 +247,8 @@
<el-option v-for="item in listOfFormalitiesList" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="名称" prop="formalitiesName" :rules="[{ required: true, message: '请输入名称', trigger: 'blur' }]">
<el-form-item label="名称" prop="formalitiesName"
:rules="[{ required: true, message: '请输入名称', trigger: 'blur' }]">
<el-input v-model="formTemplate.formalitiesName" placeholder="请输入名称" />
</el-form-item>
</el-form>

View File

@ -1,12 +1,14 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="请选择项目:" prop="pid" label-width="100">
<el-select v-model="queryParams.projectId" placeholder="请选择" @change="handleChange" clearable>
<el-option v-for="item in matrixOptions" :key="item.projectId" :label="item.name" :value="item.projectId" />
<el-option v-for="item in matrixOptions" :key="item.projectId" :label="item.name"
:value="item.projectId" />
</el-select>
</el-form-item>
<el-form-item label="请选择方阵:" prop="pid" label-width="100" v-if="relevancyStructure == '2'">
@ -21,24 +23,16 @@
<el-tabs type="border-card" v-model="activeTab" @tab-click="handleTabClick">
<el-tab-pane :label="item.name" v-for="item in tabList" :key="item.id" :name="item.id"></el-tab-pane>
<el-card shadow="never">
<el-table
ref="progressCategoryTableRef"
v-loading="loading"
:data="progressCategoryList"
row-key="id"
:default-expand-all="isExpandAll"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
v-if="isExpand"
border
>
<el-table ref="progressCategoryTableRef" v-loading="loading" :data="progressCategoryList" row-key="id"
:default-expand-all="isExpandAll" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
v-if="isExpand" border>
<el-table-column label="" width="50" type="expand">
<template #header>
<el-icon
class="cursor-pointer text-4! transform-rotate-z--90 transition-all-300"
<el-icon class="cursor-pointer text-4! transform-rotate-z--90 transition-all-300"
:class="!isExpandAll ? 'transform-rotate-z--90' : 'transform-rotate-z-90'"
@click="handleToggleExpandAll"
><Expand
/></el-icon>
@click="handleToggleExpandAll">
<Expand />
</el-icon>
</template>
<template #default="scope">
<el-card class="pl-25" shadow="hover">
@ -46,9 +40,8 @@
<el-table-column label="名称" align="center" prop="name" width="170">
<template #default="{ row }">
<el-tooltip :content="row.remark" placement="top" effect="dark" v-if="row.remark">
<span class="flex items-center justify-center"
><i class="iconfont icon-wenhao mr-0.5 text-3.5! text-#999"></i>{{ row.name }}</span
>
<span class="flex items-center justify-center"><i
class="iconfont icon-wenhao mr-0.5 text-3.5! text-#999"></i>{{ row.name }}</span>
</el-tooltip>
<span v-else>{{ row.name }}</span>
</template>
@ -60,7 +53,8 @@
</el-table-column>
<el-table-column label="是否延期" align="center" prop="isDelay" width="100">
<template #default="{ row }">
<el-tag :type="row.isDelay == '1' ? 'danger' : 'primary'">{{ row.isDelay == '1' ? '是' : '否' }}</el-tag>
<el-tag :type="row.isDelay == '1' ? 'danger' : 'primary'">{{ row.isDelay == '1' ? '是' : '否'
}}</el-tag>
</template>
</el-table-column>
<el-table-column label="计量方式" align="center" prop="unitType" width="100">
@ -71,7 +65,8 @@
<el-table-column label="总量" align="center" prop="total" width="100" />
<el-table-column label="总进度" align="center" prop="projectId">
<template #default="{ row }">
<el-progress :text-inside="true" :stroke-width="20" :percentage="row.completedPercentage" status="success" />
<el-progress :text-inside="true" :stroke-width="20" :percentage="row.completedPercentage"
status="success" />
</template>
</el-table-column>
<el-table-column label="计划总量" align="center" prop="planTotal" width="100" />
@ -87,35 +82,17 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
<template #default="scope">
<el-button
type="warning"
icon="Download"
link
size="small"
v-if="scope.row.name === '光伏板'"
<el-button type="warning" icon="Download" link size="small" v-if="scope.row.name === '光伏板'"
@click="openDialog(scope.row, 'importTableStatus', '上传表格')"
v-hasPermi="['progress:progressCategory:add']"
>
v-hasPermi="['progress:progressCategory:add']">
导入表格
</el-button>
<el-button
type="success"
icon="Plus"
link
size="small"
@click="planRef.openDialog(scope.row)"
v-hasPermi="['progress:progressCategory:add']"
>
<el-button type="success" icon="Plus" link size="small" @click="planRef.openDialog(scope.row)"
v-hasPermi="['progress:progressCategory:add']">
计划
</el-button>
<el-button
type="primary"
icon="Plus"
link
size="small"
@click="handleDayAdd(scope.row)"
v-hasPermi="['progress:progressCategory:add']"
>
<el-button type="primary" icon="Plus" link size="small" @click="handleDayAdd(scope.row)"
v-hasPermi="['progress:progressCategory:add']">
日报
</el-button>
</template>
@ -132,7 +109,8 @@
</el-table-column>
<el-table-column label="总进度" align="center" prop="projectId">
<template #default="{ row }">
<el-progress :text-inside="true" :stroke-width="20" :percentage="row.completedPercentage" status="success" />
<el-progress :text-inside="true" :stroke-width="20" :percentage="row.completedPercentage"
status="success" />
</template>
</el-table-column>
</el-table>
@ -140,7 +118,8 @@
<el-table-column label="名称" align="center" prop="name" width="170">
<template #default="{ row }">
<el-tooltip :content="row.remark" placement="top" effect="dark" v-if="row.remark">
<span class="flex items-center justify-center"><i class="iconfont icon-wenhao mr-0.5 text-3.5! text-#999"></i>{{ row.name }}</span>
<span class="flex items-center justify-center"><i
class="iconfont icon-wenhao mr-0.5 text-3.5! text-#999"></i>{{ row.name }}</span>
</el-tooltip>
<span v-else>{{ row.name }}</span>
</template>
@ -163,7 +142,8 @@
<el-table-column label="总量" align="center" prop="total" width="100" />
<el-table-column label="总进度" align="center" prop="projectId">
<template #default="{ row }">
<el-progress :text-inside="true" :stroke-width="20" :percentage="row.completedPercentage" status="success" />
<el-progress :text-inside="true" :stroke-width="20" :percentage="row.completedPercentage"
status="success" />
</template>
</el-table-column>
<el-table-column label="计划总量" align="center" prop="planTotal" width="100" />
@ -179,28 +159,17 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
<template #default="scope">
<el-button
type="warning"
icon="Download"
link
size="small"
v-if="scope.row.name === '光伏板'"
<el-button type="warning" icon="Download" link size="small" v-if="scope.row.name === '光伏板'"
@click="openDialog(scope.row, 'importTableStatus', '上传表格')"
v-hasPermi="['progress:progressCategory:add']"
>
v-hasPermi="['progress:progressCategory:add']">
导入表格
</el-button>
<el-button
type="success"
icon="Plus"
link
size="small"
@click="planRef.openDialog(scope.row)"
v-hasPermi="['progress:progressCategory:add']"
>
<el-button type="success" icon="Plus" link size="small" @click="planRef.openDialog(scope.row)"
v-hasPermi="['progress:progressCategory:add']">
计划
</el-button>
<el-button type="primary" icon="Plus" link size="small" @click="handleDayAdd(scope.row)" v-hasPermi="['progress:progressCategory:add']">
<el-button type="primary" icon="Plus" link size="small" @click="handleDayAdd(scope.row)"
v-hasPermi="['progress:progressCategory:add']">
日报
</el-button>
</template>
@ -211,7 +180,8 @@
<!-- 导入数据对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.importDataStatus" width="500px" append-to-body>
<file-upload class="pl-20 pt" v-model="dialog.file" :limit="20" :file-size="50" :file-type="['shp', 'shx', 'dbf']" />
<file-upload class="pl-20 pt" v-model="dialog.file" :limit="20" :file-size="50"
:file-type="['shp', 'shx', 'dbf']" />
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>

View File

@ -1,12 +1,14 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="请选择项目:" prop="pid" label-width="100">
<el-select v-model="queryParams.projectId" placeholder="请选择" @change="handleChange" clearable>
<el-option v-for="item in matrixOptions" :key="item.projectId" :label="item.name" :value="item.projectId" />
<el-option v-for="item in matrixOptions" :key="item.projectId" :label="item.name"
:value="item.projectId" />
</el-select>
</el-form-item>
<el-form-item label="请选择方阵:" prop="pid" label-width="100" v-if="relevancyStructure == '2'">
@ -27,13 +29,8 @@
<el-button type="primary" plain icon="Plus" @click="handleAdd()">新增</el-button>
</el-col>
<el-col :span="1.5">
<file-upload
upload-url="/progress/progressCategory/import"
v-model="file"
:limit="1"
:file-type="['xls', 'xlsx']"
:on-upload-success="handleSuccess"
>
<file-upload upload-url="/progress/progressCategory/import" v-model="file" :limit="1"
:file-type="['xls', 'xlsx']" :on-upload-success="handleSuccess">
<el-button type="primary" plain icon="upload">导入</el-button>
</file-upload>
</el-col>
@ -43,17 +40,39 @@
<el-col :span="1.5">
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
</el-col>
<el-col :span="6" :push="6">
<div class="summary-container">
<div class="summary-card owner-summary">
<div class="summary-icon">
<el-icon size="24">
<Money />
</el-icon>
</div>
<div class="summary-content">
<div class="summary-label">产值金额业主</div>
<div class="summary-value">{{ ownerOutputSum }}</div>
</div>
</div>
<div class="summary-card construction-summary">
<div class="summary-icon">
<el-icon size="24">
<Wallet />
</el-icon>
</div>
<div class="summary-content">
<div class="summary-label">产值金额分包</div>
<div class="summary-value">{{ constructionOutputSum }}</div>
</div>
</div>
</div>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table
ref="progressCategoryTableRef"
v-loading="loading"
:data="progressCategoryList"
row-key="id"
:default-expand-all="isExpandAll"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
>
<el-table ref="progressCategoryTableRef" v-loading="loading" :data="progressCategoryList" row-key="id"
:default-expand-all="isExpandAll" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
max-height="550">
<!-- <el-table-column label="父类别id" prop="parentId" /> -->
<el-table-column label="类别名称" prop="name" width="230" />
<el-table-column label="计量方式" align="center" prop="unitType">
@ -102,10 +121,12 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<div>
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['progress:progressCategory:edit']">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['progress:progressCategory:edit']">
修改
</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['progress:progressCategory:remove']">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['progress:progressCategory:remove']">
删除
</el-button>
</div>
@ -119,14 +140,9 @@
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="progressCategoryFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="父类别" prop="parentId" v-if="!form.id">
<el-tree-select
v-model="form.parentId"
:data="progressCategoryOptions"
:props="{ value: 'id', label: 'name', children: 'children' }"
value-key="id"
placeholder="请选择父类别"
check-strictly
/>
<el-tree-select v-model="form.parentId" :data="progressCategoryOptions"
:props="{ value: 'id', label: 'name', children: 'children' }" value-key="id" placeholder="请选择父类别"
check-strictly />
</el-form-item>
<el-form-item label="计量方式" prop="unitType" v-if="!form.workType && form.unitType != '0'">
<el-select v-model="form.unitType" placeholder="请选择关联数据">
@ -191,6 +207,7 @@ import {
import { ProgressCategoryVO, ProgressCategoryQuery, ProgressCategoryForm } from '@/api/progress/progressCategory/types';
import { getTabList } from '@/api/progress/progressCategoryTemplate';
import { useUserStoreHook } from '@/store/modules/user';
import { Money, Wallet } from '@element-plus/icons-vue';
const { proxy } = getCurrentInstance() as any;
const { progress_unit_type, progress_work_type } = toRefs<any>(proxy?.useDict('progress_unit_type', 'progress_work_type'));
@ -225,7 +242,7 @@ const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
const tempData = ref([])
const initFormData: ProgressCategoryForm = {
id: undefined,
parentId: undefined,
@ -291,7 +308,20 @@ const data = reactive<PageData<ProgressCategoryForm, ProgressCategoryQuery>>({
const { queryParams, form, rules } = toRefs(data);
const matrixIdList = ref([]);
const ownerOutputSum = computed(() => {
let sum = 0;
tempData.value.forEach(item => {
sum += Number(item.ownerOutputValue);
})
return proxy.formatPrice(sum);
});
const constructionOutputSum = computed(() => {
let sum = 0;
tempData.value.forEach(item => {
sum += Number(item.constructionOutputValue);
})
return proxy.formatPrice(sum);
});
/** 查询分项工程单价列表 */
const getList = async () => {
if (!queryParams.value.projectId) {
@ -310,6 +340,7 @@ const getList = async () => {
matrixId: item.projectId
};
});
if (!matrixValue.value) matrixValue.value = matrixList[0].id;
matrixOptions.value = matrixList;
queryParams.value.projectId = matrixList[0].projectId;
@ -325,6 +356,7 @@ const getList = async () => {
try {
const id = relevancyStructure.value == '2' ? matrixValue.value : activeTab.value;
const res = await listProgressCategory(id);
tempData.value = res.data;
const data = proxy?.handleTree<ProgressCategoryVO>(res.data, 'id', 'parentId');
if (data) {
progressCategoryList.value = data;
@ -506,3 +538,89 @@ onUnmounted(() => {
listeningProject();
});
</script>
<style scoped>
.summary-container {
display: flex;
gap: 16px;
justify-content: flex-end;
align-items: center;
}
.summary-card {
display: flex;
align-items: center;
padding: 16px 20px;
border-radius: 6px;
border: 1px solid #e4e7ed;
background: #ffffff;
min-width: 200px;
transition: all 0.2s ease;
}
.summary-card:hover {
border-color: #c0c4cc;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
}
.owner-summary {
background: #f8f9fa;
border-color: #409eff;
color: #303133;
}
.construction-summary {
background: #f8f9fa;
border-color: #67c23a;
color: #303133;
}
.summary-icon {
margin-right: 12px;
display: flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 4px;
background: #f0f2f5;
}
.owner-summary .summary-icon {
background: #e6f7ff;
color: #409eff;
}
.construction-summary .summary-icon {
background: #f0f9ff;
color: #67c23a;
}
.summary-content {
flex: 1;
}
.summary-label {
font-size: 13px;
color: #909399;
margin-bottom: 6px;
font-weight: 400;
}
.summary-value {
font-size: 16px;
font-weight: 600;
color: #303133;
}
@media (max-width: 768px) {
.summary-container {
flex-direction: column;
gap: 8px;
}
.summary-card {
min-width: 180px;
}
}
</style>

View File

@ -2,22 +2,14 @@
<el-dialog v-model="dialogVisible" title="招标文件" width="500" draggable>
<el-form ref="ruleFormRef" style="max-width: 600px" :model="ruleForm" :rules="rules" label-width="auto">
<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="{
<file-upload v-model="form.costEstimationFile" :fileSize="100" :auto-upload="false" @handleRemove="handleRemove"
uploadUrl="/tender/biddingPlan/uploadBiddingDocuments" method="put" ref="fileUploadRef" :data="{
projectId: currentProject?.id,
type: planType,
fileType: '1',
bidStatus: '0',
id: row.id
}"
showFileList
/>
}" showFileList />
</el-form-item>
</el-form>
<template #footer>
@ -45,7 +37,11 @@ const emit = defineEmits(['success']);
const form = ref({
costEstimationFile: ''
});
const handleRemove = (file: any, fileList: any) => {
console.log(file, fileList);
console.log('handleRemove', form.value);
};
const open = (rows: any, type: string) => {
dialogVisible.value = true;
console.log(rows, type);

View File

@ -7,23 +7,15 @@
</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="{
<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
/>
}" showFileList />
</el-form-item>
</el-form>
<template #footer>

View File

@ -13,7 +13,8 @@
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" plain :icon="Plus" @click="openDialog" v-hasPermi="['tender:biddingPlan:add']">新增</el-button>
<el-button type="primary" plain :icon="Plus" @click="openDialog"
v-hasPermi="['tender:biddingPlan:add']">新增</el-button>
</el-form-item>
</el-form>
</el-card>
@ -33,9 +34,8 @@
<el-table-column prop="bidd" align="center">
<template #header> <span style="color: red">*</span>招标文件 </template>
<template #default="scope">
<el-button type="primary" link v-hasPermi="['tender:biddingPlan:getAnnex']" @click="biddView(scope.row)" v-if="scope.row.annexCount > 0"
>查看文件({{ scope.row.annexCount }})</el-button
>
<el-button type="primary" link v-hasPermi="['tender:biddingPlan:getAnnex']" @click="biddView(scope.row)"
v-if="scope.row.annexCount > 0">查看文件({{ scope.row.annexCount }})</el-button>
</template>
</el-table-column>
<el-table-column prop="winningBidder" align="center">
@ -47,102 +47,57 @@
<el-table-column prop="bidFileName" align="center">
<template #header> <span style="color: red">*</span>中标文件 </template>
<template #default="scope">
<el-button type="primary" link @click="openPdf(scope.row.bidFile)">{{ scope.row.bidFileName }} </el-button>
<el-button type="primary" link @click="openPdf(scope.row.bidFile)">{{ scope.row.bidFileName }}
</el-button>
</template>
</el-table-column>
<el-table-column prop="plannedBiddingTime" align="center" width="250">
<template #header> <span style="color: red">*</span>计划招标时间 </template>
<template #default="scope">
<el-date-picker
v-model="scope.row.plannedBiddingTime"
@change="
<el-date-picker v-model="scope.row.plannedBiddingTime" @change="
(val: any) => {
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']" />
</template>
</el-table-column>
<el-table-column prop="contractPrice" align="center" width="200">
<template #header> <span style="color: red">*</span>合同金额 </template>
<template #default="scope">
<el-input-number
:model-value="scope.row.contractPrice"
@change="
<el-input-number :model-value="scope.row.contractPrice" @change="
(val) => {
scope.row.contractPrice = val;
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']" />
</template>
</el-table-column>
<el-table-column prop="price" label="操作" align="center" width="400">
<template #default="scope">
<el-button
type="primary"
link
icon="FolderOpened"
@click="handleSave(scope.row)"
v-hasPermi="['tender:biddingPlan:uploadBiddingDocuments']"
:disabled="scope.row.bidStatus == 1"
>招标上传
<el-button type="primary" link icon="FolderOpened" @click="handleSave(scope.row)"
v-hasPermi="['tender:biddingPlan:uploadBiddingDocuments']" :disabled="scope.row.bidStatus == 1">招标上传
</el-button>
<el-button
type="primary"
link
icon="FolderOpened"
@click="handleWinTheBid(scope.row)"
v-hasPermi="['tender:biddingPlan:uploadBiddingDocuments']"
:disabled="scope.row.bidStatus == 1"
>中标上传
<el-button type="primary" link icon="FolderOpened" @click="handleWinTheBid(scope.row)"
v-hasPermi="['tender:biddingPlan:uploadBiddingDocuments']" :disabled="scope.row.bidStatus == 1">中标上传
</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="View"
@click="handleDetail(scope.row)"
:disabled="scope.row.bidStatus == 1"
v-hasPermi="['tender:biddingPlan:getMore']"
>详情</el-button
>
<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)"
: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
>
<el-button type="primary" link 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>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-tab-pane>
</el-tabs>
<el-dialog title="新增" v-model="dialogVisible" width="75%" draggable>
@ -164,7 +119,8 @@
<el-form :model="treeForm" :inline="true">
<el-form-item label="版本号" prop="versions">
<el-select v-model="treeForm.versions" placeholder="选择版本号" @change="changeVersions">
<el-option v-for="item in options" :key="item.versions" :label="item.versions" :value="item.versions" />
<el-option v-for="item in options" :key="item.versions" :label="item.versions"
:value="item.versions" />
</el-select>
</el-form-item>
<el-form-item label="表名" prop="sheet" v-if="planType == '2'">
@ -177,16 +133,8 @@
</el-form-item>
</el-form>
</el-card>
<el-table
:data="treeData"
ref="treeTableRef"
v-loading="treeLoading"
row-key="id"
border
lazy
default-expand-all
@selection-change="handleSelection"
>
<el-table :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 prop="num" label="编号" />
<el-table-column prop="name" label="工程或费用名称" />
@ -214,20 +162,13 @@
</el-table-column>
<el-table-column prop="selectNum" label="设计量" align="center">
<template #default="scope">
<el-input-number
:model-value="scope.row.selectNum"
@change="
<el-input-number :model-value="scope.row.selectNum" @change="
(val) => {
scope.row.selectNum = val;
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>
</el-table-column>
<el-table-column prop="unitPrice" label="单价" align="center">
@ -287,15 +228,8 @@
<el-table-column prop="price" label="操作" align="center">
<template #default="scope">
<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)"
v-if="scope.row.bidStatus != 1"
v-hasPermi="['tender:biddingPlanAnnex:remove']"
>删除</el-button
>
<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>
</el-table-column>
</el-table>
@ -728,6 +662,7 @@ const delHandlebidd = (row: any) => {
});
biddView(biddViewRow.value);
}
getList()
});
};
//修改状态