This commit is contained in:
parent
aef5c1d2f6
commit
8dbe92c1b6
|
|
@ -0,0 +1,11 @@
|
|||
import request from '@/axios';
|
||||
|
||||
|
||||
// 查询项目数据列表
|
||||
export function list(data) {
|
||||
return request({
|
||||
url: '/blade-system/archivingManage/list',
|
||||
method: 'POST',
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
|
|
@ -98,6 +98,14 @@ export default [
|
|||
title: '档案数据管理'
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/archivingManager/fileData',
|
||||
name: 'FileData1',
|
||||
component: () => import('@/views/archivingManager/file-data.vue'),
|
||||
meta: {
|
||||
title: '档案数据管理'
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
path: '/archivesManagement/detailData',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,318 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card style="height: calc(100vh - 190px)">
|
||||
<el-row :gutter="24" style="display: flex; align-items: center">
|
||||
<el-col :span="14">
|
||||
<el-input v-model="filterText" placeholder="输入关键字" @keyup.enter="onHandleSearch">
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
<el-button type="primary" @click="onHandleSearch">
|
||||
查询
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div class="tree-container">
|
||||
<el-tree ref="leftTreeRef" :data="treeDataList" default-expand-all class="left-tree-list"
|
||||
@node-click="onHandleNodeClick" :filter-node-method="filterNode" highlight-current node-key="id">
|
||||
<template #default="{ node, data }">
|
||||
<span class="custom-tree-node">
|
||||
<template v-if="isTruncated(node.label)">
|
||||
<el-tooltip effect="dark" :content="node.label" placement="right">
|
||||
<span class="node-label">{{ truncateLabel(node.label) }}</span>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span class="node-label">{{ node.label }}</span>
|
||||
</template>
|
||||
</span>
|
||||
</template>
|
||||
</el-tree>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted, watch, nextTick } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { getFileManageTreeApi } from '@/api/archivesManagement/fileManager/fileManager.js'
|
||||
|
||||
const props = defineProps({
|
||||
projectId: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
fileStatus: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits(['handleNodeClick'])
|
||||
|
||||
// 响应式数据
|
||||
const treeDataList = ref([])
|
||||
const filterText = ref('')
|
||||
const originalTreeData = ref([])
|
||||
const isflag = ref(false)
|
||||
const isAdd = ref('')
|
||||
const title = ref('')
|
||||
const row = ref({})
|
||||
const selectedNodeId = ref(null)
|
||||
const leftTreeRef = ref()
|
||||
|
||||
// 计算属性
|
||||
const filteredTreeData = computed(() => {
|
||||
if (!filterText.value) {
|
||||
return treeDataList.value
|
||||
}
|
||||
return filterTreeData(treeDataList.value)
|
||||
})
|
||||
|
||||
// 方法
|
||||
const handleQuery = async () => {
|
||||
const currentNode = leftTreeRef.value?.getCurrentNode()
|
||||
if (currentNode) {
|
||||
selectedNodeId.value = currentNode.id
|
||||
}
|
||||
|
||||
await getLeftTreeList()
|
||||
|
||||
nextTick(() => {
|
||||
if (selectedNodeId.value && leftTreeRef.value) {
|
||||
leftTreeRef.value.setCurrentKey(selectedNodeId.value)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const closeDialog = () => {
|
||||
isflag.value = false
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
const showColose = () => {
|
||||
isflag.value = false
|
||||
}
|
||||
|
||||
|
||||
const onHandleNodeClick = (data) => {
|
||||
selectedNodeId.value = data.id
|
||||
emit('handleNodeClick', data)
|
||||
}
|
||||
|
||||
const convertToVueTree = (data) => {
|
||||
if (!data || !Array.isArray(data)) {
|
||||
return []
|
||||
}
|
||||
|
||||
return data.map(item => {
|
||||
const node = {
|
||||
id: item.id,
|
||||
label: item.contentName,
|
||||
level: item.level,
|
||||
sort: item.sort,
|
||||
parentId: item.parentId,
|
||||
parentName: item.parentName,
|
||||
isUnique: item.isUnique
|
||||
}
|
||||
|
||||
if (item.children && Array.isArray(item.children) && item.children.length > 0) {
|
||||
const children = convertToVueTree(item.children)
|
||||
if (children.length > 0) {
|
||||
node.children = children
|
||||
}
|
||||
}
|
||||
|
||||
return node
|
||||
})
|
||||
}
|
||||
|
||||
const truncateLabel = (text) => {
|
||||
if (!text) return ''
|
||||
const max = 100
|
||||
return text.length > max ? text.slice(0, max) + '...' : text
|
||||
}
|
||||
|
||||
const isTruncated = (text) => {
|
||||
if (!text) return false
|
||||
return text.length > 100
|
||||
}
|
||||
|
||||
const getLeftTreeList = async () => {
|
||||
const res = await getFileManageTreeApi({ proId: props.projectId })
|
||||
const transformedData = convertToVueTree(res.data.data)
|
||||
treeDataList.value = transformedData
|
||||
originalTreeData.value = JSON.parse(JSON.stringify(treeDataList.value))
|
||||
}
|
||||
|
||||
const onHandleSearch = () => {
|
||||
if (filterText.value) {
|
||||
ElMessage.error('搜索内容包含非法字符,请重新输入')
|
||||
return
|
||||
}
|
||||
leftTreeRef.value?.filter(filterText.value)
|
||||
}
|
||||
|
||||
const filterNode = (value, data) => {
|
||||
if (!value) return true
|
||||
return data.label.indexOf(value) !== -1
|
||||
}
|
||||
|
||||
const filterTreeData = (treeData) => {
|
||||
const result = []
|
||||
for (const node of treeData) {
|
||||
const newNode = { ...node }
|
||||
if (node.children && node.children.length > 0) {
|
||||
const filteredChildren = filterTreeData(node.children)
|
||||
if (filteredChildren.length > 0) {
|
||||
newNode.children = filteredChildren
|
||||
result.push(newNode)
|
||||
} else if (node.label.indexOf(filterText.value) !== -1) {
|
||||
result.push(node)
|
||||
}
|
||||
} else if (node.label.indexOf(filterText.value) !== -1) {
|
||||
result.push(newNode)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// 监听器
|
||||
watch(filterText, (val) => {
|
||||
leftTreeRef.value?.filter(val)
|
||||
})
|
||||
|
||||
// 生命周期
|
||||
onMounted(() => {
|
||||
getLeftTreeList()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.tree-container {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
max-height: calc(100vh - 270px);
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.tree-container::-webkit-scrollbar {
|
||||
width: 0px;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.tree-container::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.tree-container::-webkit-scrollbar-thumb {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.left-tree-list {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.custom-tree-node {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
min-height: 20px;
|
||||
padding: 1px 0;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.node-label {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
overflow: visible;
|
||||
text-overflow: initial;
|
||||
white-space: normal;
|
||||
word-break: break-word;
|
||||
word-wrap: break-word;
|
||||
line-height: 1.2;
|
||||
padding-right: 4px;
|
||||
}
|
||||
|
||||
.left-tree-list .el-tree-node__content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: auto;
|
||||
min-height: 20px;
|
||||
padding: 1px 4px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.left-tree-list .el-tree-node__content:has(.node-label[style*="height"]) {
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
|
||||
height: auto !important;
|
||||
align-items: center;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.left-tree-list .el-tree-node.is-current>.el-tree-node__content {
|
||||
background-color: #b3d9ff;
|
||||
color: #006e6a !important;
|
||||
}
|
||||
|
||||
.left-tree-list .el-tree-node.is-current>.el-tree-node__content .el-tree-node__label {
|
||||
color: #006e6a !important;
|
||||
}
|
||||
|
||||
.left-tree-list .el-tree-node.is-current>.el-tree-node__content .custom-tree-node {
|
||||
color: #006e6a !important;
|
||||
}
|
||||
|
||||
.left-tree-list .el-tree-node__content:hover {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.left-tree-list .el-tree-node.is-current>.el-tree-node__content:hover {
|
||||
background-color: #8cc8ff;
|
||||
}
|
||||
|
||||
.btn-box {
|
||||
margin-left: 4px;
|
||||
opacity: 0;
|
||||
transition: opacity 0.15s ease-in-out;
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1px;
|
||||
}
|
||||
|
||||
.left-tree-list .el-tree-node__content:hover .btn-box {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
:deep(.el-tree-node__content) {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
height: auto;
|
||||
min-height: 38px;
|
||||
padding: 1px 4px;
|
||||
}
|
||||
|
||||
:deep(.el-tree-node__expand-icon) {
|
||||
padding: 1px;
|
||||
margin-right: 1px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
:deep(.el-tree-node__content > .el-tree-node__expand-icon) {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,248 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card style="min-height: calc(100vh - 190px);">
|
||||
<avue-crud
|
||||
:option="option"
|
||||
:data="tableData"
|
||||
:page="page"
|
||||
:table-loading="loading"
|
||||
@search-change="searchChange"
|
||||
@search-reset="searchReset"
|
||||
@current-change="currentChange"
|
||||
@size-change="sizeChange"
|
||||
@refresh-change="refreshChange"
|
||||
@on-load="onLoad"
|
||||
>
|
||||
|
||||
<template #fileName="{ row }">
|
||||
<span class="file-name-link" @click="viewFile(row)">{{ row.fileName }}</span>
|
||||
</template>
|
||||
</avue-crud>
|
||||
|
||||
<!-- 预览文件 -->
|
||||
<ViewFile v-if="isViewflag" :rowData="row" :title="title" :isAdd="isAdd" @closeDialog="closeDialog"
|
||||
@showColose="showColose" :width="600" />
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
const router = useRouter();
|
||||
import { ref, reactive, watch, nextTick } from 'vue';
|
||||
import {
|
||||
getFileManageApi
|
||||
} from '@/api/archivesManagement/fileManager/fileManager.js';
|
||||
import ViewFile from '@/views/viewFile/viewFile.vue';
|
||||
|
||||
const props = defineProps({
|
||||
projectId: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
selectedNode: {
|
||||
type: Object,
|
||||
default: null
|
||||
},
|
||||
auditStatus: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
});
|
||||
|
||||
// 响应式数据
|
||||
const title = ref('');
|
||||
const isflag = ref(false);
|
||||
const isflagRect = ref(false);
|
||||
const isViewflag = ref(false);
|
||||
const isAdd = ref('');
|
||||
const isRect = ref('');
|
||||
const row = ref({});
|
||||
const loading = ref(false);
|
||||
const addBtnIsShow = ref(true);
|
||||
const defaultParams = ref({});
|
||||
|
||||
// 表格数据
|
||||
const tableData = ref([]);
|
||||
const page = reactive({
|
||||
currentPage: 1,
|
||||
pageSize: 10,
|
||||
total: 0
|
||||
});
|
||||
|
||||
const query = reactive({});
|
||||
|
||||
// Avue 配置
|
||||
const option = reactive({
|
||||
height: 'auto',
|
||||
calcHeight: 32,
|
||||
tip: false,
|
||||
searchShow: true,
|
||||
searchMenuSpan: 6,
|
||||
menu: false,
|
||||
border: true,
|
||||
index: true,
|
||||
viewBtn: false,
|
||||
selection: false,
|
||||
addBtn: false,
|
||||
editBtn: false,
|
||||
delBtn: false,
|
||||
dialogClickModal: false,
|
||||
column: [
|
||||
{
|
||||
label: '档案名称',
|
||||
prop: 'contentName',
|
||||
search: true
|
||||
},
|
||||
{
|
||||
label: '档案文件',
|
||||
prop: 'fileName',
|
||||
slot: true
|
||||
},
|
||||
{
|
||||
label: '上传人',
|
||||
prop: 'createUserName'
|
||||
},
|
||||
{
|
||||
label: '保管期限',
|
||||
prop: 'term'
|
||||
},
|
||||
{
|
||||
label: '来源',
|
||||
prop: 'dataSource',
|
||||
slot: true
|
||||
},
|
||||
{
|
||||
label: '责任单位',
|
||||
prop: 'unitName'
|
||||
},
|
||||
{
|
||||
label: '上传时间',
|
||||
prop: 'createTime',
|
||||
width: 160
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
// 方法
|
||||
const closeDialog = () => {
|
||||
isflag.value = false;
|
||||
isflagRect.value = false;
|
||||
isViewflag.value = false;
|
||||
};
|
||||
|
||||
const showColose = () => {
|
||||
isflag.value = false;
|
||||
isViewflag.value = false;
|
||||
};
|
||||
|
||||
/** 详情操作 */
|
||||
const handleDetail = (rowData) => {
|
||||
title.value = '详情';
|
||||
isAdd.value = 'detail';
|
||||
row.value = rowData;
|
||||
isflag.value = true;
|
||||
};
|
||||
|
||||
|
||||
/** 修改操作 */
|
||||
const handleUpdate = (rowData) => {
|
||||
title.value = '修改';
|
||||
isAdd.value = 'edit';
|
||||
row.value = rowData;
|
||||
row.value.belongName = props.selectedNode.parentName + '/' + props.selectedNode.label;
|
||||
row.value.detailStatus = false;
|
||||
isflag.value = true;
|
||||
};
|
||||
const handleRect = (rowData) => {
|
||||
title.value = '加入整改清单';
|
||||
isRect.value = 'rect';
|
||||
row.value = rowData;
|
||||
row.value.belongName = props.selectedNode.parentName + '/' + props.selectedNode.label + '/' + row.value.fileName;
|
||||
row.value.detailStatus = false;
|
||||
isflagRect.value = true;
|
||||
};
|
||||
|
||||
// 预览文件
|
||||
const viewFile = (rowData) => {
|
||||
title.value = '预览';
|
||||
isAdd.value = 'view';
|
||||
row.value = rowData;
|
||||
isViewflag.value = true;
|
||||
};
|
||||
|
||||
/* 搜索操作 */
|
||||
const handleQuery = () => {
|
||||
onLoad(page, query);
|
||||
};
|
||||
|
||||
// 表格相关方法
|
||||
const searchChange = (params, done) => {
|
||||
Object.assign(query, params);
|
||||
page.currentPage = 1;
|
||||
onLoad(page, params);
|
||||
done();
|
||||
};
|
||||
|
||||
const searchReset = () => {
|
||||
Object.keys(query).forEach(key => delete query[key]);
|
||||
onLoad(page);
|
||||
};
|
||||
|
||||
const currentChange = (currentPage) => {
|
||||
page.currentPage = currentPage;
|
||||
};
|
||||
|
||||
const sizeChange = (pageSize) => {
|
||||
page.pageSize = pageSize;
|
||||
};
|
||||
|
||||
const refreshChange = () => {
|
||||
onLoad(page, query);
|
||||
};
|
||||
|
||||
const onLoad = async (pageParam, params = {}) => {
|
||||
loading.value = true;
|
||||
try {
|
||||
const requestData = {
|
||||
...params,
|
||||
...defaultParams.value,
|
||||
pageNum: pageParam.currentPage,
|
||||
pageSize: pageParam.pageSize
|
||||
};
|
||||
const res = await getFileManageApi(requestData);
|
||||
if (res.data.code === 200) {
|
||||
tableData.value = res.data.rows;
|
||||
page.total = res.data.total;
|
||||
}
|
||||
} catch (error) {
|
||||
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// 监听选中的节点
|
||||
watch(() => props.selectedNode, (newVal) => {
|
||||
addBtnIsShow.value = !(newVal && Number(newVal.level) === 4);
|
||||
|
||||
const parentId = newVal && newVal.id ? newVal.id : 0;
|
||||
const proId = props.projectId;
|
||||
defaultParams.value = { parentId, proId };
|
||||
|
||||
onLoad(page, { parentId, proId });
|
||||
}, { immediate: true });
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.file-name-link {
|
||||
color: #409EFF;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.file-name-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-card class="toolbar-card">
|
||||
<div class="toolbar">
|
||||
<div class="toolbar-left">
|
||||
<el-button type="danger" plain icon="Close" @click="handleClose">返回</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-row :gutter="24" class="content-row" v-if="projectId && auditStatus">
|
||||
<el-col :span="8" class="pane-left">
|
||||
<LeftTree @handleNodeClick="handleNodeClick" :projectId="projectId" :auditStatus="auditStatus" />
|
||||
</el-col>
|
||||
<el-col :span="16" class="pane-right">
|
||||
<RightTable :selectedNode="selectedNode" :projectId="projectId" :auditStatus="auditStatus" />
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import LeftTree from './components/leftTree.vue'
|
||||
import RightTable from './components/rightTable.vue'
|
||||
import {
|
||||
getProjectNameByIdApi,
|
||||
} from '@/api/archivesManagement/fileManager/fileManager';
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
// 响应式数据
|
||||
const projectId = ref(null)
|
||||
const auditStatus = ref(null)
|
||||
const selectedNode = ref(null)
|
||||
const archiveForm = ref({
|
||||
projectName: '',
|
||||
description: ''
|
||||
})
|
||||
|
||||
// 生命周期
|
||||
onMounted(() => {
|
||||
projectId.value = route.query.id
|
||||
auditStatus.value = route.query.auditStatus
|
||||
// 获取项目名称并回显
|
||||
getProjectName()
|
||||
})
|
||||
|
||||
// 获取项目名称
|
||||
const getProjectName = async () => {
|
||||
try {
|
||||
const res = await getProjectNameByIdApi({
|
||||
id: projectId.value
|
||||
})
|
||||
if (res.data?.code === 200) {
|
||||
const project = res.data.data
|
||||
archiveForm.value.projectName = project.proName || '未知项目'
|
||||
} else {
|
||||
archiveForm.value.projectName = '未知项目'
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取项目名称失败:', error)
|
||||
archiveForm.value.projectName = '未知项目'
|
||||
}
|
||||
}
|
||||
|
||||
// 方法
|
||||
const handleClose = () => {
|
||||
router.go(-1)
|
||||
}
|
||||
|
||||
const handleNodeClick = (data) => {
|
||||
selectedNode.value = data
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.app-container {
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.toolbar-card {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.toolbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.toolbar-left :deep(.el-button) + :deep(.el-button) {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.toolbar-right :deep(.el-tag) {
|
||||
border-color: #dcdfe6;
|
||||
}
|
||||
|
||||
.content-row {
|
||||
min-height: calc(100vh - 200px);
|
||||
}
|
||||
|
||||
.pane-left,
|
||||
.pane-right {
|
||||
background: #fff;
|
||||
border-radius: 6px;
|
||||
height: 100%;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.pane-left {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.pane-right {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
|
||||
.dialog-footer {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
.dialog-footer .el-button+.el-button {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.sync-icon {
|
||||
font-size: 48px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.sync-icon .el-icon-loading {
|
||||
color: #409EFF;
|
||||
animation: rotating 2s linear infinite;
|
||||
}
|
||||
|
||||
.sync-text p {
|
||||
margin: 0;
|
||||
font-size: 16px;
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
@keyframes rotating {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,193 @@
|
|||
<template>
|
||||
<basic-container>
|
||||
<avue-crud
|
||||
:option="option"
|
||||
:table-loading="loading"
|
||||
:data="data"
|
||||
v-model:page="page"
|
||||
:permission="permissionList"
|
||||
:before-open="beforeOpen"
|
||||
v-model="form"
|
||||
ref="crud"
|
||||
@search-change="searchChange"
|
||||
@search-reset="searchReset"
|
||||
@selection-change="selectionChange"
|
||||
@current-change="currentChange"
|
||||
@size-change="sizeChange"
|
||||
@refresh-change="refreshChange"
|
||||
@on-load="onLoad"
|
||||
>
|
||||
<!-- 自定义档案状态显示 -->
|
||||
<template #auditStatus="{ row }">
|
||||
<el-tag :type="getauditStatusType(row.auditStatus)" effect="light">
|
||||
{{ formatauditStatus(row.auditStatus) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
|
||||
<!-- 操作列 -->
|
||||
<template #menu="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="openFileManager(row)"
|
||||
>
|
||||
详情
|
||||
</el-button>
|
||||
</template>
|
||||
</avue-crud>
|
||||
</basic-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
list,
|
||||
} from '@/api/archivesManagement/archivingManage';
|
||||
import { mapGetters } from 'vuex';
|
||||
import website from '@/config/website';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
form: {},
|
||||
query: {},
|
||||
loading: true,
|
||||
page: {
|
||||
pageSize: 10,
|
||||
currentPage: 1,
|
||||
total: 0,
|
||||
},
|
||||
selectionList: [],
|
||||
option: {
|
||||
height: 'auto',
|
||||
calcHeight: 32,
|
||||
tip: false,
|
||||
searchShow: true,
|
||||
searchMenuSpan: 6,
|
||||
border: true,
|
||||
index: true,
|
||||
viewBtn: false,
|
||||
selection: false,
|
||||
addBtn: false,
|
||||
editBtn: false,
|
||||
delBtn: false,
|
||||
dialogClickModal: false,
|
||||
column: [
|
||||
|
||||
{
|
||||
label: '归档工程',
|
||||
prop: 'proName',
|
||||
search: true,
|
||||
},
|
||||
{
|
||||
label: '审核状态',
|
||||
prop: 'auditStatus',
|
||||
search: true,
|
||||
slot: true, // 启用插槽
|
||||
},
|
||||
],
|
||||
},
|
||||
data: [],
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permission']),
|
||||
permissionList() {
|
||||
return {
|
||||
addBtn: this.validData(this.permission.post_add, false),
|
||||
viewBtn: this.validData(this.permission.post_view, false),
|
||||
delBtn: this.validData(this.permission.post_delete, false),
|
||||
editBtn: this.validData(this.permission.post_edit, false),
|
||||
};
|
||||
},
|
||||
ids() {
|
||||
let ids = [];
|
||||
this.selectionList.forEach(ele => {
|
||||
ids.push(ele.id);
|
||||
});
|
||||
return ids.join(',');
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
beforeOpen(done, type, row) {
|
||||
done(); // 必须调用 done()
|
||||
},
|
||||
formatauditStatus(status) {
|
||||
switch (status) {
|
||||
case '0':
|
||||
return '待审核';
|
||||
case '1':
|
||||
return '审核通过';
|
||||
case '2':
|
||||
return '已下发整改';
|
||||
default:
|
||||
return '未知状态';
|
||||
}
|
||||
},
|
||||
getauditStatusType(status) {
|
||||
switch (status) {
|
||||
case '0':
|
||||
return 'warning';
|
||||
case '1':
|
||||
return 'success';
|
||||
case '2':
|
||||
return 'error';
|
||||
default:
|
||||
return 'info';
|
||||
}
|
||||
},
|
||||
searchReset() {
|
||||
this.query = {};
|
||||
this.onLoad(this.page);
|
||||
},
|
||||
searchChange(params, done) {
|
||||
this.query = params;
|
||||
this.page.currentPage = 1;
|
||||
this.onLoad(this.page, params);
|
||||
done();
|
||||
},
|
||||
selectionChange(list) {
|
||||
this.selectionList = list;
|
||||
},
|
||||
selectionClear() {
|
||||
this.selectionList = [];
|
||||
this.$refs.crud.toggleSelection();
|
||||
},
|
||||
currentChange(currentPage) {
|
||||
this.page.currentPage = currentPage;
|
||||
},
|
||||
sizeChange(pageSize) {
|
||||
this.page.pageSize = pageSize;
|
||||
},
|
||||
refreshChange() {
|
||||
this.onLoad(this.page, this.query);
|
||||
},
|
||||
onLoad(page, params = {}) {
|
||||
this.loading = true;
|
||||
let data = {
|
||||
...params,
|
||||
pageNum:page.currentPage,
|
||||
pageSize:page.pageSize
|
||||
};
|
||||
list(data).then(res => {
|
||||
const data = res.data;
|
||||
this.page.total = data.total;
|
||||
this.data = data.rows;
|
||||
this.loading = false;
|
||||
this.selectionClear();
|
||||
});
|
||||
},
|
||||
|
||||
openFileManager(row) {
|
||||
this.$router.push({
|
||||
path: '/archivingManager/fileData',
|
||||
query: {
|
||||
id: row.id, // 项目ID
|
||||
auditStatus: row.auditStatus // 审核状态
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style></style>
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
export const formLabel = [
|
||||
{
|
||||
isShow: false,
|
||||
f_type: 'ipt',
|
||||
f_label: '文件名称',
|
||||
f_model: 'contentName',
|
||||
f_max: 32,
|
||||
},
|
||||
{
|
||||
isShow: false,
|
||||
f_type: 'date',
|
||||
f_label: '上传时间',
|
||||
f_model: 'uploadTime',
|
||||
},
|
||||
]
|
||||
|
||||
export const columnsList = [
|
||||
{ t_props: 'contentName', t_label: '档案名称', t_width: 200 },
|
||||
{ t_slot: 'fileName', t_label: '档案文件', t_width: 140 },
|
||||
{ t_props: 'createUserName', t_label: '上传人' },
|
||||
{ t_props: 'term', t_label: '保管期限' },
|
||||
{ t_slot: 'dataSource', t_label: '来源' },
|
||||
{ t_props: 'unitName', t_label: '责任单位' },
|
||||
{ t_props: 'createTime', t_label: '上传时间', t_width: 160 }
|
||||
]
|
||||
Loading…
Reference in New Issue