项目手册现状分类使用字典值

xuhongjie
项洋 2 months ago
parent ae6e44fd70
commit 16a1d7f4ef

@ -52,7 +52,6 @@
>
</div>
<el-table v-loading="loading" :data="postList">
<!-- @selection-change="handleSelectionChange"
<el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center">
<template slot-scope="scope">
@ -60,8 +59,6 @@
</template>
</el-table-column>
<el-table-column label="手册名称" align="center" prop="name" />
<!-- <el-table-column label="发布单位" align="center" prop="unit" /> -->
<!-- <el-table-column label="发布人" align="center" prop="author" /> -->
<el-table-column label="创建时间" align="center" prop="createTime" />
<el-table-column label="操作" align="center">
<template slot-scope="scope">
@ -237,7 +234,8 @@
height="400"
:row-key="(row) => row.id"
v-loading="loading"
@selection-change="handleSelectAll"
@select="handleSelect"
@select-all="handleSelectAll"
>
<el-table-column
type="selection"
@ -257,7 +255,11 @@
prop="xzfl"
label="现状分类"
align="center"
></el-table-column>
>
<template slot-scope="scope">
<dict-tag :options="dict.type.xzfl" :value="scope.row.xzfl"/>
</template>
</el-table-column>
<el-table-column
prop="xmfrdwxz"
label="项目法人单位"
@ -312,10 +314,15 @@
v-for="(project, index) in selectedProjects"
:key="index"
class="selected-item"
@click="removeSelectedProject(project)"
>
<div class="dot-indicator"></div>
<span class="project-name">{{ project.name }}</span>
<el-button
type="text"
icon="el-icon-close"
class="remove-btn"
@click="removeSelectedProject(project)"
></el-button>
</div>
</div>
</div>
@ -395,6 +402,8 @@ export default {
Pagination: () => import("@/components/Pagination"),
FileUpload,
},
// 使
dicts: ['xzfl'],
data() {
return {
queryParams: {
@ -443,7 +452,6 @@ export default {
loadingPdf: false,
pdfScale: 0.9, // PDF
editingHandbook: null, //
isRestoringSelection: false, //
};
},
mounted() {
@ -486,10 +494,6 @@ export default {
};
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.selectedRows = selection;
},
//
handlePreview(row) {
this.previewMode = true;
@ -497,11 +501,8 @@ export default {
this.currentPage = 1;
this.pageCount = 0;
this.loadingPdf = true;
// 使exportHandbook APIPDF
this.loadPdfFromApi(row.id);
},
// APIPDF
async loadPdfFromApi(id) {
try {
const res = await exportHandbook([id]);
@ -518,22 +519,18 @@ export default {
pageLoaded() {
this.loadingPdf = false;
},
// PDF
pdfLoaded() {
this.loadingPdf = false;
},
// PDF
pdfError(error) {
this.$message.error("PDF渲染失败: " + (error.message || "未知错误"));
this.loadingPdf = false;
},
//
prevPage() {
if (this.currentPage > 1) {
this.currentPage--;
}
},
//
nextPage() {
if (this.currentPage < this.pageCount) {
this.currentPage++;
@ -541,14 +538,9 @@ export default {
},
//
async handleExport(id) {
// if (!this.selectedRows || this.selectedRows.length === 0) {
// this.$message.warning("");
// return;
// }
try {
this.exportLoading = true;
// const idList = this.selectedRows.map((item) => item.id);
//
// const res = await exportHandbook(idList);
const res = await exportHandbook([id]);
this.$download.saveAs(res, "项目手册.pdf");
@ -570,19 +562,11 @@ export default {
this.getProjectList();
},
handleAddDialogClose(done) {
// this.$confirm("", "", {
// confirmButtonText: "",
// cancelButtonText: "",
// type: "warning",
// })
// .then(() => {
this.resetAddForm();
this.editingHandbook = null;
this.selectedProjectIds = [];
this.selectedProjects = [];
done();
// })
// .catch(() => {});
},
resetAddForm() {
this.coverForm = {
@ -596,7 +580,6 @@ export default {
subtitle: "",
};
},
//
nextStep() {
if (this.activeStep === 1) {
if (!this.coverForm.title) {
@ -616,7 +599,6 @@ export default {
size: this.projectParams.pageSize,
name: this.projectSearch || undefined,
};
getBasicInformationPage(params)
.then((response) => {
this.projectList = response.data.records;
@ -633,13 +615,10 @@ export default {
this.$message.error("获取项目列表失败");
});
},
//
searchProjects() {
// ID
this.projectParams.pageNum = 1;
this.getProjectList();
},
//
resetProjectSearch() {
this.projectSearch = "";
this.projectParams.pageNum = 1;
@ -647,8 +626,20 @@ export default {
},
handleRowClick(row) {
//
this.$refs.projectTable.toggleRowSelection(row);
const selectedRows = this.$refs.projectTable.selection;
const isSelected = selectedRows.some(item => item.id === row.id);
if (isSelected) {
//
if (!this.selectedProjectIds.includes(row.id)) {
this.selectedProjectIds.push(row.id);
this.selectedProjects.push(row);
}
} else {
//
this.selectedProjectIds = this.selectedProjectIds.filter(id => id !== row.id);
this.selectedProjects = this.selectedProjects.filter(item => item.id !== row.id);
}
},
removeSelectedProject(project) {
@ -682,18 +673,11 @@ export default {
this.$refs.projectTable.clearSelection();
if (!this.selectedProjectIds.length) return;
//
this.isRestoringSelection = true;
this.projectList.forEach((row) => {
if (this.selectedProjectIds.includes(row.id)) {
this.$refs.projectTable.toggleRowSelection(row, true);
}
});
//
this.$nextTick(() => {
this.isRestoringSelection = false;
});
},
//
@ -736,25 +720,54 @@ export default {
});
}
},
//
handleSelect(selection, row) {
//
const isSelected = selection.some(item => item.id === row.id);
if (isSelected) {
//
if (!this.selectedProjectIds.includes(row.id)) {
this.selectedProjectIds.push(row.id);
this.selectedProjects.push(row);
}
} else {
//
this.selectedProjectIds = this.selectedProjectIds.filter(id => id !== row.id);
this.selectedProjects = this.selectedProjects.filter(item => item.id !== row.id);
}
},
// /
handleSelectAll(selection) {
//
if (this.isRestoringSelection) return;
// ID
const currentPageIds = this.projectList.map((item) => item.id);
// ID
const currentPageIds = this.projectList.map(item => item.id);
//
//
if (selection.length === 0) {
// -
this.selectedProjectIds = this.selectedProjectIds.filter(
id => !currentPageIds.includes(id)
);
this.selectedProjects = this.selectedProjects.filter(
project => !currentPageIds.includes(project.id)
);
} else {
// -
//
const projectIdsNotInCurrentPage = this.selectedProjectIds.filter(
id => !currentPageIds.includes(id)
);
const projectsNotInCurrentPage = this.selectedProjects.filter(
(project) => !currentPageIds.includes(project.id)
project => !currentPageIds.includes(project.id)
);
//
this.selectedProjects = [...projectsNotInCurrentPage, ...selection];
// ID
this.selectedProjectIds = this.selectedProjects.map(
(project) => project.id
);
//
this.selectedProjectIds = [...projectIdsNotInCurrentPage, ...currentPageIds];
this.selectedProjects = [...projectsNotInCurrentPage, ...this.projectList];
}
},
//
handleEdit(row) {
@ -833,58 +846,13 @@ export default {
.el-input {
flex: 1;
max-width: 100%;
}
}
}
.headerbox {
margin-bottom: 15px;
}
/* 搜索表单样式 */
.search-form {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 15px;
}
.form-item {
display: flex;
align-items: center;
margin-bottom: 10px;
}
.label {
font-size: 14px;
color: #606266;
margin-right: 10px;
white-space: nowrap;
font-weight: 500;
}
.search-input,
.search-date {
width: 30%;
transition: all 0.3s;
margin-right: 30px;
::v-deep .el-input {
flex: 1!important;
max-width: 100%!important;
}
::v-deep .el-input__inner {
width: 100%!important;
}
&:hover {
box-shadow: 0 0 0 1px #409eff;
}
}
.btn-group {
display: flex;
gap: 10px;
}
/* 表格样式 */
.tablebtntwo {
width: 100%;
@ -938,7 +906,6 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
// margin-bottom: 15px;
padding: 15px 20px;
background-color: #ffffff;
border-radius: 8px 8px 0 0;
@ -1022,31 +989,6 @@ export default {
border-radius: 2px;
background-color: white;
}
::v-deep .vue-pdf-embed {
width: 100%;
display: flex;
justify-content: center;
}
&.el-loading-parent--relative {
.el-loading-mask {
background-color: rgba(255, 255, 255, 0.9);
.el-loading-spinner {
.circular {
width: 50px;
height: 50px;
}
.el-loading-text {
color: #409eff;
font-size: 14px;
margin-top: 10px;
}
}
}
}
}
@keyframes fadeIn {
@ -1126,57 +1068,6 @@ export default {
font-size: 14px;
}
/* 上传区域样式 */
.upload-area {
flex: 1;
border: 1px dashed #d9d9d9;
border-radius: 6px;
overflow: hidden;
position: relative;
&:hover {
border-color: #409eff;
}
}
.upload-box {
width: 100%;
height: 180px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
cursor: pointer;
background-color: #fafafa;
}
.upload-icon {
font-size: 28px;
color: #8c939d;
margin-bottom: 8px;
}
.upload-text {
color: #606266;
font-size: 14px;
text-align: center;
}
.upload-tip {
font-size: 12px;
color: #909399;
margin-top: 8px;
}
.preview-image {
width: 100%;
height: 180px;
object-fit: cover;
cursor: pointer;
border: 1px solid #dcdfe6;
border-radius: 3px;
}
/* 表单布局样式 */
.cover-form {
width: 100%;
@ -1232,6 +1123,24 @@ export default {
margin-right: 8px;
}
.search-input,
.search-date {
width: 30%;
transition: all 0.3s;
margin-right: 30px;
::v-deep .el-input {
flex: 1!important;
max-width: 100%!important;
}
::v-deep .el-input__inner {
width: 100%!important;
}
&:hover {
box-shadow: 0 0 0 1px #409eff;
}
}
.search-btn {
margin-right: 8px;
}
@ -1291,6 +1200,16 @@ export default {
padding: 8px 15px;
background-color: #f8f8f8;
border-radius: 4px;
position: relative;
transition: all 0.2s;
&:hover {
background-color: #f0f0f0;
.remove-btn {
opacity: 1;
}
}
}
.dot-indicator {
@ -1306,13 +1225,17 @@ export default {
color: #333;
}
.remove-icon {
cursor: pointer;
color: #c0c4cc;
font-size: 16px;
.remove-btn {
opacity: 0.5;
transition: all 0.2s;
color: #909399;
padding: 2px;
margin-left: 8px;
&:hover {
color: #f56c6c;
color: #F56C6C;
opacity: 1;
transform: scale(1.1);
}
}

Loading…
Cancel
Save