<template>
|
<div class="app-container">
|
<!-- 搜索区域 -->
|
<div class="search-area">
|
<el-form :inline="true" :model="queryParams" class="search-form">
|
<el-form-item label="镇街">
|
<el-select v-model="queryParams.street" placeholder="请选择" clearable size="small">
|
<el-option v-for="item in streetOptions" :key="item.dictCode" :label="item.dictLabel" :value="item.dictLabel"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="资料名称">
|
<el-input v-model="queryParams.name" placeholder="请输入" clearable size="small" />
|
</el-form-item>
|
<el-form-item>
|
<el-button type="default" @click="resetQuery">重置</el-button>
|
<el-button type="primary" @click="handleQuery">查询</el-button>
|
</el-form-item>
|
</el-form>
|
</div>
|
|
<!-- 操作按钮区域 -->
|
<div class="action-buttons">
|
<el-button v-hasPermi="['storing-data:add']" type="primary" @click="handleAdd">新增资料</el-button>
|
</div>
|
|
<!-- 表格区域 -->
|
<el-table v-loading="loading" :data="tableData" border style="width: 100%">
|
<el-table-column prop="street" label="镇/街道" min-width="120" align="center" />
|
<el-table-column prop="name" label="资料名称" min-width="100" align="center">
|
|
</el-table-column>
|
<el-table-column prop="totalApplicants" label="附件内容" min-width="100" align="center" >
|
<template slot-scope="scope">
|
<el-button type="text" @click="handleDownload(scope.row)">{{ scope.row.attachName }}</el-button>
|
</template>
|
</el-table-column>
|
<el-table-column prop="updateTime" label="更新时间" min-width="150" align="center" />
|
|
<el-table-column label="操作" width="180" align="center" fixed="right">
|
<template slot-scope="scope">
|
<template>
|
<el-button v-hasPermi="['storing-data:detail']" size="mini" type="text" @click="handleView(scope.row, 'detail')">详情</el-button>
|
<el-button v-hasPermi="['storing-data:edit']" size="mini" type="text" @click="handleView(scope.row, 'edit')">编辑</el-button>
|
<el-button v-hasPermi="['storing-data:delete']" size="mini" type="text" @click="handleDelete(scope.row)">删除</el-button>
|
</template>
|
</template>
|
</el-table-column>
|
</el-table>
|
|
<!-- 分页区域 -->
|
<div class="pagination-container">
|
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
|
:current-page="queryParams.pageNum" :page-sizes="[10, 20, 30, 40]" :page-size="queryParams.pageSize"
|
layout="total, sizes, prev, pager, next, jumper" :total="total">
|
</el-pagination>
|
</div>
|
|
|
<!-- 上传组件 -->
|
<upload-dialog ref="uploadDialog" :visible.sync="uploadDialogVisible" :type="uploadType" :streetOptions="streetOptions"
|
@success="handleUploadSuccess" />
|
</div>
|
</template>
|
|
<script>
|
import Pagination from "@/components/Pagination";
|
import UploadDialog from "./components/UploadDialog";
|
import { list, add, del, update } from "@/api/storing-data";
|
import { getDictData } from '@/api/placement'
|
|
export default {
|
name: "StoringData",
|
components: {
|
Pagination,
|
UploadDialog,
|
},
|
data() {
|
return {
|
// 遮罩层
|
loading: false,
|
// 总条数
|
total: 4,
|
// 状态数据字典
|
statusOptions: [
|
{ value: "待审核", label: "待审核" },
|
{ value: "已通过", label: "已通过" },
|
{ value: "已驳回", label: "已驳回" },
|
],
|
// 审核相关
|
approvalType: "audit", // 'audit' 或 'detail'
|
currentRow: {},
|
// 上传相关
|
uploadDialogVisible: false,
|
uploadType: "add", // 'add' 或 'batch'
|
// 表格数据
|
tableData: [],
|
// 查询参数
|
queryParams: {
|
pageNum: 1,
|
pageSize: 10,
|
street: undefined,
|
name: undefined
|
},
|
streetOptions: []
|
};
|
},
|
created() {
|
this.getList();
|
// 镇(街道)
|
getDictData('street').then(response => {
|
this.streetOptions = response.data
|
})
|
},
|
methods: {
|
/** 查询列表 */
|
getList() {
|
list(this.queryParams).then(res => {
|
this.tableData = res.data.records;
|
this.total = res.data.total;
|
});
|
},
|
/** 搜索按钮操作 */
|
handleQuery() {
|
this.queryParams.pageNum = 1;
|
this.getList();
|
},
|
/** 重置按钮操作 */
|
resetQuery() {
|
this.queryParams = {
|
pageNum: 1,
|
pageSize: 10,
|
projectName: undefined,
|
town: undefined,
|
owner: undefined,
|
idCard: undefined,
|
status: undefined,
|
};
|
this.handleQuery();
|
},
|
/** 新增按钮操作 */
|
handleAdd() {
|
this.uploadType = "add";
|
this.uploadDialogVisible = true;
|
},
|
/** 导入模板下载操作 */
|
handleImport() {
|
// 实现下载逻辑
|
},
|
handleSizeChange(size) {
|
this.queryParams.pageSize = size;
|
this.getList();
|
},
|
handleCurrentChange(page) {
|
this.queryParams.pageNum = page;
|
this.getList();
|
},
|
/** 批量导入按钮操作 */
|
handleBatchImport() {
|
this.uploadType = "batch";
|
this.uploadDialogVisible = true;
|
},
|
/** 统一的查看/详情按钮操作 */
|
handleView(row, type) {
|
this.$refs.uploadDialog.form = JSON.parse(JSON.stringify(row));
|
this.$refs.uploadDialog.fileList = [{name: row.attachName, url: row.attachUrl}];
|
this.uploadType = type;
|
this.uploadDialogVisible = true;
|
},
|
/** 审核提交处理 */
|
handleApprovalSubmit(data) {
|
// 处理审核提交
|
const { result, comment } = data;
|
this.$message({
|
type: "success",
|
message: result === "pass" ? "审核通过成功!" : "审核驳回成功!",
|
});
|
// 刷新列表
|
this.getList();
|
},
|
/** 删除按钮操作 */
|
handleDelete(row) {
|
this.$confirm("是否确认删除该资料?", "警告", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(() => {
|
del({id: row.id}).then(res => {
|
this.$message({
|
type: "success",
|
message: "删除成功!",
|
});
|
this.getList();
|
})
|
.catch(() => { });
|
})
|
.catch(() => { });
|
},
|
/** 上传成功回调 */
|
handleUploadSuccess() {
|
this.uploadDialogVisible = false;
|
this.getList();
|
this.$message({
|
type: "success",
|
message: this.uploadType === "add" ? "新增成功!" : "批量导入成功!",
|
});
|
},
|
// 处理文件下载
|
handleDownload(row) {
|
if (!row.attachUrl) {
|
this.$message.error('文件不存在');
|
return;
|
}
|
|
// 显示加载提示
|
this.loading = true;
|
|
// 使用fetch获取文件内容
|
fetch(row.attachUrl)
|
.then(response => response.blob())
|
.then(blob => {
|
// 创建blob URL
|
const url = window.URL.createObjectURL(blob);
|
// 创建临时a标签
|
const link = document.createElement('a');
|
link.href = url;
|
link.download = row.attachName || '下载文件';
|
document.body.appendChild(link);
|
link.click();
|
// 清理
|
document.body.removeChild(link);
|
window.URL.revokeObjectURL(url);
|
})
|
.catch(error => {
|
console.error('下载失败:', error);
|
this.$message.error('文件下载失败');
|
})
|
.finally(() => {
|
this.loading = false;
|
});
|
},
|
},
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.app-container {
|
padding: 20px;
|
background-color: #fff;
|
|
.search-area {
|
background-color: #fff;
|
padding: 15px 0;
|
margin-bottom: 20px;
|
border-radius: 4px;
|
|
.search-form {
|
display: flex;
|
align-items: center;
|
|
.el-form-item {
|
margin-bottom: 0;
|
margin-right: 20px;
|
}
|
}
|
}
|
|
.action-buttons {
|
margin-bottom: 20px;
|
|
.el-button {
|
margin-right: 10px;
|
}
|
}
|
|
.el-table {
|
margin-bottom: 20px;
|
|
.el-button--text {
|
padding: 0 8px;
|
|
&:not(:last-child) {
|
border-right: 1px solid #dcdfe6;
|
}
|
}
|
}
|
|
.pagination-container {
|
text-align: center;
|
margin-top: 20px;
|
}
|
|
.el-tag {
|
border-radius: 2px;
|
}
|
}
|
</style>
|